Pytest系列(一)


一、Pytest详解以及常用的插件安装 1.pytest是一个非常成熟的基于python的单元测试框架(测试的是程序的最小单元:函 数,方法) python:unittest和pytest java: junit和testng 2.pytest可以和所有的自动化测试工具或模块:selenium,requets,appium结合实现 web自动化,接口自动化,app自动化。 3.它可以和allure插件生成美观以及定制化的报告以及和jenkins实现持续集成。 4.pytest有很多强大的插件 pytest(自己) pytest-html (生成简易的HTML报告) pytest-xdist(多线程执行) pytest-ordering(修改测试用例的执行顺序) pytest-rerunfailures (失败用例重跑) pytest-base-url(管理基础路径:测试环境,开发环境,线上环境) allure-pytest(生成allure报告) 放到一个requirements.txt的文件。一次行的安装所有的插件。命令如下:-r表示递归 1 pip install ‐r requirements.txt   5.pytest单元框架主要用来做什么? (1)发现测试用例(2)执行测试用例 (3)判断测试结果 (4)生成测试报告 二、Pytest默认的测试用例的规则 1.模块名(py文件)必须以test_开头或_test结尾 2.测试类必须以Test开头,并且不能带有init方法(初始化方法) 3.测试用例必须以test开头 三、Pytest用例运行方式以及参数 1.命令行模式运行 命令:pytest 参数: -vs -v 输出更加详细的测试用例的信息 -s 输出用例中的调试信息 示例:pytest -vs -n 多线程运行 示例:pytest -vs -n 2 --reruns 失败用例重跑 示例:pytest -vs --reruns 2 -x 一旦出现一个用例失败则终止测试。 示例:pytest -x --maxfail 出现指定次数的错误则终止测试。 ‘ 示例:pytest -vs --maxfail 2 --html 生成简易的html报告 示例:pytest -vs --html=./reports/report.html -k 运行包含有指定字符串的测试用例(测试用例的名称必须很规范) test_usermanage_adduser test_usermanage_deluser test_usermanage_edituser 示例:pytest -vs -k "mashang or jiaoyu" 指定模块运行:pytest -vs ./testcases/test_weixin.py 指定文件夹运行:pytest -vs ./testcases/weixin通过node id运行:pytest -vs ./testcases/weixin/test_weixin.py::TestApi::test_02_add_flag 2.主函数模式运行 1 if __name__ == '__main__': 2 pytest.main(['‐vs']); 3.基于pytest.ini配置文件运行 (1)配置文件的名称是固定的,一般放在项目的根目录下。 (2)作用是:可以改变pytest默认的测试用例的规则。 (3)不管是命令行的方式,还是主函数的方式都会自动的读取这个配置文件去运行。 1 [pytest] 2 #命令行参数 3 addopts = ‐vs ‐‐html=./reports/report.html ‐m "smoke or user_manage" 4 #指定测试用例的路径 5 testpaths = ./testcases/weixin 6 #指定测试模块的默认规则 7 python_files = test_*.py 8 #指定测试类的默认规则 9 python_classes = Test* 10 #指定测试用例的默认规则 11 python_functions = test_* 12 markers = 13 smoke:冒烟用例 14 user_manage:用户管理用例 注意: 1.一旦有编码错误,那么需要改成gb2312的编码格式或者是不写中文注释。 2.必须在测试用例上面加上标记。 四、pytest测试用例的执行顺序 默认的执行顺序是从上到下依次执行。 改变测试用例的执行顺序可以使用插件:pytest-ordering 1 @pytest.mark.run(order=3) 五、pytest跳过测试用例 1.无条件跳过1 @pytest.mark.skip(reason="这里写跳过的理由") 2.有条件跳过 1 @pytest.mark.skipif(age<5,reason="少于10年工作经验不考虑录取") 六、pytest测试用例的前后置
def setup_class(self): 
print("在类的前面执行的操作") 

def teardown_class(self): 
print("在类的后面执行的操作") 
def setup(self): 
print("测试用例执行之前的操作") 
def teardown(self): 
print("测试用例执行之后的操作")