一、基础 - requests模块
从web抓取信息——Requests_power query怎么先提交web请求再提取返回数据-CSDN博客
第三方模块requests常用方法及Response对象属性和方法详解
第三方模块requests中data和json传参方式详解
第三方模块requests对于Cookie鉴权以及Session鉴权的处理
requests模块底层原理以及接口统一请求封装
二、框架 - Pytest框架
Pytest框架简介,默认测试用例规则,运行方式详解以及前后置夹具应用处理。
Pytest框架之@pytest.fixtrue装饰器以及通过 conftest.py文件实现全局前置应用。
Pytest实现接口自动化断言以及结合allure- pytest插件生成企业级Allure测试报告
接口自动化测试框架请求封装以及接口关联框架封装改进。
pytest简介
pytest是python的第三方单元测试框架,比自带unittest更简洁和高效,支持非常丰富的插件,同时兼容 unittest 框架。
它可以和很多的工具或框架,selenium,requests,appium实现多种自动化测试。
它可以和allure结合生成美观的报告以及和jenkins实现持续集成。
最重要的是,它有很多的插件:
- pytest-html生成html报告插件
- pytest-xdist 多线程
- pytest-ordering标记测试用例的执行顺序
- pytest-returnfailers失败用例重跑
- pytest-base-url 管理基础路径
- allure-pytest 生成allure报告
- pytest
- requests
- pyyaml
pytest框架的安装:pip install pytest
pytest框架优点
1、简单灵活,容易上手;
2、支持参数化;
3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appium等自动化测试,接口自动化测试(pytest+request);
4、pytest具有很多第三方插件,并且可以自定义扩展。
pytest框架使用注意事项
1、 .py 测试文件必须以test_开头(或者以_test结尾)
2、测试类必须以Test开头,并且不能有 init 方法
3、测试方法必须以test_开头
4、断言必须使用 assert
pytest运行方式
1、如果不提供任何参数,那么pytest会在当前目录及子目录下寻找以test_开头或者以_test结尾的测试文件,且该文件中以test_开头的测试函数
2、当运行时指定测试文件的时候
①此时目录一定要切换到测试文件所在的目录,否则pytest搜索不到测试,不会执行.
②执行测试文件里的函数的时候,会搜索以test_开头的测试函数执行,不符合此规则的函数不会被执行
③如果含有测试类,那么允许该测试文件时,会搜索类名以Test开头的类,且该测试类中的函数命名也必须符合要求才会被执行
④运行的方式可以在命令行也可以在主方法上面运行
例如:指定运行pythonDemo目录下的test_01模块
......
if __name__ == "__main__":
pytest.main(["pythonDemo/test_01.py"])
或者命令行模式:
pytest pythonDemo/test_01.py
pytest.main(['-vs'])运行时打印调试信息
pytest框架作用
1.发现用例:根据每个框架默认的规则去发现并且加载测试用例
2.执行用例:将测试用例安装一定的顺序和条件执行,并生成结果
3.判断结果:通过断言来判断实际结果和预期结果是否相同
4.生成报告:统计测试进度,耗时,通过率,生成报告。
执行测试用例时的前后置处理
第一种:和unittest相似
测试用例之前:setup()
测试用例之后:teardown()
类前执行:setup_class()
类后执行:teardown_class()
第二种:fixture固件
更强大,可以更加随心所欲地设置前后置处理。
装饰器
@pytest.fixture(scope="",params="",autouse="",ids="",name="")
- scope:作用域,作用于哪些用例
- function(): 默认
- class
- module
- package/session 包/会话
- params:数据驱动
- autouse:True:自动作用,False:手动作用
- ids:当数据驱动时更改参数名
- name:fixture的别名
第三种:@pytest.mark.usefixtures
使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例。
叠加usefixture ,如果一个方法或者一个class用例想要同事调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加,注意叠加顺序,先执行的放底层,后执行的放上层。
usefixtures和传fixture的区别:
如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别,当fixture需要用到return的参数时,只能将参数名称直接当参数传入,不适合使用usefixtures,只有不需要用到return出来的参数时,两种方式都可以。
举例1:在test_register前执行查询数据库操作
结果:
举例2:在test_register前后都执行查询数据库操作
yeild是生成器,可以多次返回数据,在此处的作用是唤醒执行用例后的操作。
结果
举例3:在每个用例前后执行查询数据库的操作
举例4:yeild可以返回值
举例5: 利用params传参进行数据驱动
结果
举例6 :ids当数据驱动时更改参数名
举例7:name:fixture的别名,调用时直接使用别名
python+pytest+requests
单个接口调试
1.Post请求
文件上传,文件所在路径
如果用左斜杠,一个就好;用右斜杠,要用两个,其中一个表示转义符;如果是绝对路径,也可以在前面加r。
2.Get请求,查询已上传的文件
3.PUT请求,更新文件
接口关联
举例:PUT请求更新文件后,再用GET请求查询是否已更新。
思路:在类中创建一个全局变量,可以供类中的每个方法调用,从而实现接口关联。PUT请求的返回值(更改全局变量)作为GET请求的输入值。
接口自动化框架封装
1.统计数据
2.异常处理
try except
3.日志监控
统一封装:所有封装放在common包里面
WEB项目接口间基本都存在cookie关联。requests.session能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。
requests.session的作用:
自动处理cookie,即下一次请求会带上前一次的cookie。
requests.session的应用场景:
自动处理连续的多次请求过程中产生的cookie。
三、封装
Yaml测试用例详解以及Yaml语法规则详解以及读写和清除
Pytest+Paramatrizes+Yaml实现接口自动化 yaml测试用例数据驱动。
接口自动化框架集成Jenkins实现CI持续集成构建接口自动化生态体系
企业级接口自动化测试框架技术深入探讨和实现
1.YAML文件用途,结构,数据类型详解
2.Pytest用例管理框架数据驱动详解
3.Pytest结合Yaml实现数据驱动
4.pytest结合allure-pytest插件生成alture测试报告
5.接口自动化测试框架技术框架深入探讨和落地实施
requirements.txt
所有模块、插件放进requirements.txt中。在Terminal中输入pip install -r requirements.txt,可以安装全部模块/插件。
一般来说,main方法放在最外层,新建一个run.py文件。
-s:表示输出调试信息,包括print打印的信息
-v显示更详细的信息
-vs一起使用
-n支持多线程或者分布式运行测试用例
统一封装:所有封装放在common包里面
conftest.py (命名固定)专门用来保存固件的文件
数据怎么实现关联?——用Yaml 文件保存,Yaml文件可以自动转换为json/字典格式。不用excel格式是因为Excel不能自动转换为字典,不好处理各种数据格式。
New file - xxx.yaml (例子:extract.yaml),所有数据都放到yaml文件。
Commom包下 - New Python file - yaml_util.py,对yaml文件做读写
读取yaml文件
with open(os.getcwd()+"/extract.yaml", encoding="utf-8") as f:
#os.getcwd根目录
结果:
写入Yaml文件、清空yaml文件
mode = 'a',表示追加;
mode = 'w',表示清空。
运行结果:
实战:将access_token写入Yaml文件
再获取access_token
结果:把access_token自动存入yaml
改进:在执行之前先清空yaml文件。
Yaml文件
YAML文件用途,结构,数据类型详解
YAML是一种可读性高,易于理解,用来表达数据序列化的数据类型。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。它可以和json之间灵活切换,支持注释,换行,字符串。
YAML的配置文件后缀为 .yml
用途:配置文件;编写测试用例。
数据结构:
1.Map对象(键:(空格)值)key: value
name: Amy
2.数组(list):用一组横线“-”开头来表示
- name: Amy
- name: Bob
Pytest用例管理框架数据驱动
数据驱动 :其实就是把我们测试用例的数据放到excel,yaml,csv,mysql,然后通过去改变数据达到改变测试用例的执行结果 。
数据驱动装饰器
@pytest.mark.parametrized() 装饰器可以实现对测试用例的参数化,方便测试数据的获取。
第一个参数是字符串,多个参数中间用逗号隔开
第二个参数是list,多组数据用元组类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应
- 传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化
- 传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化
Pytest结合Yaml实现数据驱动
新建get_token.yaml
注意层级关系
Pytest结合allure-pytest插件生成allure测试报告
1.下载Allure,解压,配置path环境变量(路径中不能含中文)
验证:allure --verison(在dos和pycharm中都验证一次)需要jdk如果Pycharm验证失败,需要重启Pycharm,让环境生效
2.在Pytest.ini中中加入命令
--alluredir=./temps --clean-alluredir
3.生成allure报告
要思考的问题:
传键值对、json、文件上传
接口关联,动态参数,接口加密,接口签名,接口鉴权
动态参数、文件上传、断言(数据库操作)、解决yaml文件中数据量太大的问题(参数化:excel,csv,yaml)、yaml里面如何保存变量及调用函数 Yaml里面如何实现数据驱动?
Yaml里面如何保存变量以及调用函数?企业自动化框架具体什么样?断言