1.pytest框架初识
pytest是什么?
- pytest是基于unittest开发的另一款更高级更好用的单元测试框架
为什么要用pytest?
- 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
- 能够支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
- 支持重复执行(rerun)失败的 case
- 支持运行由 nose, unittest 编写的测试 case
- 可生成 html 报告
- 方便的和持续集成工具 jenkins 集成
- 可支持执行部分用例
- 具有很多第三方插件,并且可以自定义扩展
pytest框架执行流程
1、执行操作
安装 pip install requests -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com (这里使用的是豆瓣源,安装起来很方便)
查看 pip show pytest
文件名是conftest.py的,在运行同目录下的其他用例文件时,这个文件也会被运行
2、参数化(excel用例)
3、报告生成
pytest框架注意事项
1、.py测试文件必须以test_开头(或以_test结尾)
2、测试类必须以Test开头,并且不能有init方法
3、测试方法必须以test开头
4、断言必须使用assert,断言失败后,同一个方法的后面的语句就不会执行
搭建项目
目录
1、testcase--放测试用例(代码) -建package 、这个目录下的类和方法才需要Test和test开头
2、Lib--库--放一些模块的-建package 这个目录下的类和方法不需要Test和test开头
3、报告--log、html
4、data--放测试用例(excel文件)
5、config--放配置文件
运行pytest的方法:
1、在pycharm里的终端,进入需要运行用例的目录
pytest 运行用例命令 (-s是输出打印内容)
2、不想在终端运行在pycharm中运行,在要执行的用例文件中加入:
if __name__ =="__main__":
pytest.main(['-s'])
3、生成pytest原生态的报告 ,首先需要 pip install pytest-html ,在控制台输出的命令如下:
pytest test_login.py -s --html=report.html
环境初始化和环境清除
在pytest中有四种setup和teardown
例如:def setup_class(self):
session=类().方法(传参)
注意:
1.setup_module和teardown_module在整个测试用例所在的文件中所有的方法运行前和运行后运行,只会运行一次
2.setup_class和teardown_class则在整个文件中的一个类中所有用例的前后运行
3.setup_method和teardown_method则在类里面的每个方法运行前后运行
4.setup_function和teardown_function则是在非类下属的每个测试方法的前后运行
了解:
一、概念理解
requests库注意点
data和json参数都可以传字典
1、json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)
(1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串(json))
(2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
2、json.dump()和json.load()主要用来读写json文件函数
注意:data的优先级比json高,如果请求入参里有data和json,会把json忽视
口诀一:params参数,如果传入的是字典,自动编码为表单 ---针对get方法
口诀二:data参数,如果传入的是字典,自动编码为表单 ---针对的是post/put方法
口诀三:data参数,如果传入的是字符串,按原格式直接发布出去 ---针对的是post/put方法
口诀四:json参数,如果传入的是字典,自动编码为json字符串---针对的是post/put方法 就是 json = json.dumps(dict)
口诀五:json参数,如果传入的是字符串,按原格式基础上添加双引号发布出去 ---针对的是post/put方法 不常用
注意:
如果方法中带有self,则调用类时,类名().方法(方法入参1,方法入参2) --这是类的实例化方法
如果方法中不带有self,则调用类时,类名.方法(方法入参1,方法入参2)