一、pytest的 -m 选项
pytest支持标记测试用例,选择多标记的测试用例进行执行
import pytest
from page_obj.login_page import LoginPage
import allure
@allure.feature("登录模块")
class TestLogin:
@allure.title("成功登录")
@pytest.mark.smoke #标记用例
def test_login_success(self, app_page):
LoginPage(app_page).login('xxxxxxx', 'xxxxxx')
assert 1 == 1
@allure.title("失败登录")
def test_login_error2(self, app_page):
assert 1 == 1
import pytest,os
cur_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
result_path = cur_path + '/web/autotest/ui/result/'
result_report = cur_path + '/web/autotest/ui/result_report/'
if not os.path.exists(result_path):os.makedirs(result_path)
if not os.path.exists(result_report):os.makedirs(result_report)
if __name__ == '__main__':
pytest.main([
'-m','smoke', #筛选带有smoke标记的所有测试用例
'--clean-alluredir',
'--alluredir=' + result_path,
'test_suites/',
])
os.system("allure generate --clean "+result_path+" --report-dir "+result_report) #转换为html
筛选后只执行 test_login_success这条测试用例
二、多个标记:
(1)、pytest -m "smoke and smoke2" 筛选带有smoke和smoke2的测试用例
import pytest
from page_obj.login_page import LoginPage
import allure
@allure.feature("登录模块")
class TestLogin:
@allure.title("成功登录")
@pytest.mark.smoke #标记用例
@pytest.mark.smoke2
def test_login_success(self, app_page):
LoginPage(app_page).login('xxxxxxx', 'xxxxxx')
assert 1 == 1
@pytest.mark.smoke
@allure.title("成功登录")
def test_login_error2(self, app_page):
assert 1 == 1
import pytest,os
cur_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
result_path = cur_path + '/web/autotest/ui/result/'
result_report = cur_path + '/web/autotest/ui/result_report/'
if not os.path.exists(result_path):os.makedirs(result_path)
if not os.path.exists(result_report):os.makedirs(result_report)
if __name__ == '__main__':
pytest.main([
'-m','smoke and smoke2',
'--clean-alluredir',
'--alluredir=' + result_path,
'test_suites/',
])
os.system("allure generate --clean "+result_path+" --report-dir "+result_report) #转换为html
筛选后只执行 test_login_success这条测试用例
(2)、pytest -m "smoke2 or smoke3" 筛选带有smoke2或者smoke3 的测试用例
import pytest
from page_obj.login_page import LoginPage
import allure
@allure.feature("登录模块")
class TestLogin:
@allure.title("成功登录")
@pytest.mark.smoke #标记用例
def test_login_success(self, app_page):
LoginPage(app_page).login('xxxxxxx', 'xxxxxx')
assert 1 == 1
@pytest.mark.smoke2
@allure.title("成功登录")
def test_login_error2(self, app_page):
assert 1 == 1
import pytest,os
cur_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
result_path = cur_path + '/web/autotest/ui/result/'
result_report = cur_path + '/web/autotest/ui/result_report/'
if not os.path.exists(result_path):os.makedirs(result_path)
if not os.path.exists(result_report):os.makedirs(result_report)
if __name__ == '__main__':
pytest.main([
'-m','smoke or smoke2', #筛选带有smoke标记的所有测试用例
'--clean-alluredir',
'--alluredir=' + result_path,
'test_suites/',
])
os.system("allure generate --clean "+result_path+" --report-dir "+result_report) #转换为html
筛选后只执行 test_login_success 和 test_login_error2用例
(3)、
pytest -m "smoke and not smoke2" 筛选带有smoke1 但不带有smoke2的测试
(二)、标记测试类
import pytest
from page_obj.login_page import LoginPage
import allure
@allure.feature("登录模块")
@pytest.mark.smoke
class TestLogin:
@allure.title("成功登录")
def test_login_success(self, app_page):
LoginPage(app_page).login('xxxxxxx', 'xxxxxx')
assert 1 == 1
@allure.title("成功登录")
def test_login_error2(self, app_page):
assert 1 == 1
运行的时候有个警告:
解决方式一:添加pytest.int 配置文件
方式二: