pytest と selenium を使用して webui 自動テストを実行する。収集段階でテストが実際に実行されているように見える問題があります。このフェーズでは、pytest がテストを実行するのではなく、収集することを期待します。最終結果は、2 と予想されるところに 6 つのテスト結果が得られることです。ここで興味深いのは、6 つの結果が HTML レポートにのみ表示されることです。コマンドラインでは、予想される2行の出力しか得られません(ただし、テストは文字通り複数回実行されているため、これら2つのテストを実行するのに300秒かかります)。
tests/test_datadriven.py
#!/usr/bin/env python
from unittestzero import Assert
from pages.home import Home
from pages.administration import RolesTab
from api.api import ApiTasks
import time
import pytest
from data.datadrv import *
class TestRolesDataDriven(object):
scenarios = [scenario1,scenario2]
@pytest.mark.challenge
def test_datadriven_rbac(self, mozwebqa, org, perm_name, resource, verbs, allowed, disallowed):
"""
Perform a data driven test related to role based access controls.
All parameters are fullfilled by the data.
:param org: Organization Name
:param perm_name: Permission name
:param resource: Resource
:param verbs: A tuple of verbs
:returns: Pass or Fail for the test
"""
sysapi = ApiTasks(mozwebqa)
home_page = Home(mozwebqa)
rolestab = RolesTab(mozwebqa)
role_name = "role_%s" % (home_page.random_string())
perm_name = "perm_%s" % (home_page.random_string())
username = "user%s" % home_page.random_string()
email = username + "@example.com"
password = "redhat%s" % (home_page.random_string())
sysapi.create_org(org)
sysapi.create_user(username, password, email)
home_page.login()
home_page.tabs.click_tab("administration_tab")
home_page.tabs.click_tab("roles_administration")
home_page.click_new()
rolestab.create_new_role(role_name)
rolestab.click_role_permissions()
rolestab.role_org(org).click()
rolestab.click_add_permission()
rolestab.select_resource_type(resource)
home_page.click_next()
for v in verbs:
home_page.select('verbs', v)
home_page.click_next()
rolestab.enter_permission_name(perm_name)
rolestab.enter_permission_desc('Added by QE test.')
rolestab.click_permission_done()
rolestab.click_root_roles()
rolestab.click_role_users()
rolestab.role_user(username).add_user()
home_page.header.click_logout()
home_page.login(username, password)
for t in allowed:
Assert.true(t(home_page))
for t in disallowed:
Assert.false(t(home_page))
データ/data.py
###
# DO NOT EDIT HERE
###
def pytest_generate_tests(metafunc):
"""
Parse the data provided in scenarios.
"""
idlist = []
argvalues = []
for scenario in metafunc.cls.scenarios:
idlist.append(scenario[0])
items = scenario[1].items()
argnames = [x[0] for x in items]
argvalues.append(([x[1] for x in items]))
metafunc.parametrize(argnames, argvalues, ids=idlist)
###
# EDIT BELOW
# ADD NEW SCENARIOS
###
scenario1 = ('ACME_Manage_Keys', { 'org': 'ACME_Corporation',
'perm_name': 'ManageAcmeCorp',
'resource': 'activation_keys',
'verbs': ('manage_all',),
'allowed': (Base.is_system_tab_visible,
Base.is_new_key_visible,
Base.is_activation_key_name_editable),
'disallowed': (Base.is_dashboard_subs_visible,)})
scenario2 = ('Global_Read_Only', { 'org': 'Global Permissions',
'perm_name': 'ReadOnlyGlobal',
'resource': 'organizations',
'verbs': ('read','create'),
'allowed': (Base.is_organizations_tab_visible,
Base.is_new_organization_visible,
Base.is_new_organization_name_field_editable),
'disallowed': (Base.is_system_tab_visible,
Base.is_new_key_visible)})
完全なソースは github で入手できます。https://github.com/eanxgeek/katello_challenge
ここで何が起こっているのか誰にも分かりますか?pytest-mozwebqa プラグイン、pytests、およびセレンを使用しています。
ありがとう!