接口自动化测试
python
json.loads() # 把json转换为字符串格式
json.dumps # 把字符串转换为json格式
pytest 用户管理框架
一. pytest 单元测试框架
- 什么是单元测试框架
- 单元测试框架是指在软件开发中,针对软件的最小单位(函数,方法)进项正确性的检查测试
- 单元测试框架
- java:junittest和testng
- python:unittest和pytest
- 单元测试框架主要做什么?
- 测试发现:从多个文件里面去找到我们测试用例
- 测试执行:按照一定的顺序和规则去执行。并生成结果
- 测试判断:通过断言判断预期结果和实际结果的差异
- 测试报告:统计测试进度,耗时、通过率,生成测试报告
二. 单元测试框架和自动化测试框架有什么关系?
- 什么是自动化测试框架
- 他就是自动化测试组长针对一个项目开发的一个代码框架,这个框架封装了很多基础模块,报告模块等等。
- 作用
- 提高测试效率,降低维护成本
- 减少人工干预,提高测试准确性,增加代码复用性
- 核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试
- pytest单元测试框架和自动化测试框架的关系
- 单元测试框架:只是自动化测试框架中的组成部分之一
- pom设计模式:只是自动化测试框架中的组成部分之一
数据驱动。。。
关键字驱动。。。
全局配置文件的封装
日志监控
selnium,requests二次封装
断言
报告邮件
更多.....
三. pytest简介
- pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,容易上手
- pytest可以和selenium,requests,appium结合实现web自动化,接口自动化,APP自动化。
- pytest可以实现测试用例的跳过以及reruns失败用户重试
- pytest可以和allure生成非常美观的测试报告
- pytest可以和jenkins持续集成
- pytest有很多非常强大的插件,并且这些插件能够实现很多使用的操作
- pytest
- pytest-html # 生成html格式的自动化测试报告
- pytest-xdist 测试用例分布式运行,多cpu分发
- pytest-ordering 用户改变测试用例的执行顺序
- pytest-rerunfailures
- allure-pytest 用户生成美观的测试报告
pip install -r requirement.txt
四. 使用pytest,默认的测试用例规则以及基础应用
- 模块名必须以test_开头或者_test结尾
- 测试类必须以Test开头,并且不能有init方法
- 测试方法必须以test开头
五. pytest测试用例的运行方式
参数详情:
- -s :表示输出调试的信息,包括print打印的消息
- -v :表示详细的方式
- -vs :这两个参数可以合并
- -n :支持分布式或者多线程运行测试用例:
- --reruns NUM :失败测试用例重跑
- -x :表示只要有一个用例报错,测试停止
- --maxfail=2 :出现连个用例失败,停止
- -k: 根据测试用例的部分字符串指定测试用例
- --html ./report/report.html: 生成html的测试报告
-
主函数模式
- 运行所有的用例:pytest.main()
- 指定模块:pytest.main(['-vs','test_login.py'])
- 指定目录:pytest.main(['-vs','./interface_test'])
- 通过nodeid指定用例运行:nodieid有模块名,分隔符,类名,方法名,函数组成
- pytest.mian(['-vs','./interface_test/test_interface.py::test_04_func'])
- pytest.main(['-vs','./interface_test/test_interface.py::Testinterface::test_03_zhillao'])
-
命令行模式
- 运行所有:pytest
- 指定模块:pytest -vs test_login.py
- 指定目录:pytest -vs ./interface_test
- 指定nodeid:pytest -vs ./interface_test/test_interface.py::Testinterface::test_03_zhillao
-
通过读取pytest.ini配置文件运行
pytest.ini这个文件它是pytest单元测试框架的核心配置文件- 位置:一般放在项目的根目录
- 编码:必须是ANSi
- 作用:改变pytest默认的行为
- 运行的规则:不管是主函数的模式运行,命令行模式运行,都会去读这个配置文件
"""ini
[pytest]
addopts = -vs
testpaths = ./testcases
python_files = test.py
python_classes = Test
python_functions = test_*
markers =
smoke: 冒烟测试
"""
六. pytest执行测试用例的顺序
unittest:ascll的大小来绝对的执行顺序
pytest:默认从上到下
改名默认的执行顺序:使用mark标记
@pytest.mark.run(order=1)
七. 如何分组执行(冒烟,分模块执行,分接口和分web执行)
smoke:冒烟用例,分布在各个模块
pytest -m "smoke"
pytest -m "smoke or "usermanage or productmanage"
八. pytest 跳过测试用例
- 无条件跳过
@pytest.mark.skip(reason="没有条件")
@pytest.mark.skipif(age>=18,reason="已成年")
day02
pytest框架实现一些前后置(固件、夹具)的处理,常用三种
一、setup/treardown,setup_class/teardown_class
为什么需要这些功能?
比如:web自动化执行用例之前,请问需要开发浏览器吗?用例执行后需要关闭浏览器?
"""mysql
class TestDemo:
def setup(self):
print('\n这个是每个测试用例之前执行\n')
def teardown(self):
print('\n这个是每个测试用例执行之后执行\n')
def setup_class(self):
print('这个是每个类之前之前执行')
def teardown_class(self):
print('这个是每个测试类之后执行')
def test_ganme_01(self):
print('this is game1')
def test_game_02(self):
print('this the game2')
def test_game_03(slef):
print('this is game3')
"""
二、 使用@pytest.fixture()装饰器来实现部分用例的前后置。
@pytest.fixture(scope="",params="",autouse="",ids="",name="")
scope表示的是被@pytest。fixture标记的方法的作用域。function(默认),class,module,package/session
params:参数化
autouse = Ture:自动执行,默认为False
ids:当使用params参数化时,给每一个值设置一个变量名,意义不大。
name:给表示的是被@pytest.fixture标记的方法取一个别名。
三、通过confftest.py和pytest.fixture()结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理)
- conftest.py 文件是单独存放的一个夹具配置文件,名称不能修改
- 用处可以在不同的py文件中使用同一个fixture函数
- conftest.py需要和运行的用例放到统一层
四、断言
assert
assert 1==2
五、 pytest结合allure-pytest插件生成allure报告
allure-pytest
-
下载解压配置path路径
- https://github.com/allure-framework/allure2/releases
- path:$/bin
- 生成临时的allure报告的json文件:addopts = -vs --alluredir ./temp --clean-alluredir
- python 代码设置:os.system(r"allure generate ./report/tmp -o ./report/html --clean")
-
allure 报告参数修改
day03
三、 接口自动化测试矿建关于接口关联封装
安装:pyyaml
策略:去掉全局变量,用YAML文件带起保存
企业落地实时:问题
需要处理的问题:
- 一个接口一个yaml文件,如果说我一个接口有30条用例,那么yaml文件会很庞大
- 有些接口参数是动态的,这种怎么处理
- 断言封装
- 文件上传
- 日志模块
- 投入和产出比,深度思考:关于如何能够做到你自己吧框架封装好之后,其他的测试不需要写代码,也可以实现接口自动化
测开:
- 业务测开:平台写好,直接使用。功能测试都可以做
- 平台测开:在自动化框架的思想上能够自主的搭建平台
- 开发转测试
- 自动化测试做了2-3年,对框架非常熟练,转测试开发。
POM自动化
-
自动化测试框架是如何实现的
-
关键字驱动
-
POM
- pageObjectModule 页面对象模型,在web和appUI中,最为核心的一种,也是业内公认最佳的一种模型
- eg:
讲流程所关联的页面作为对象,讲对象串联起来,形成一个个不同的流程
pom的实现
- 结构设计
- 逻辑代码 :实现所有函数的封装,类似与关键字的驱动的设计模式,
- 页面对象代码: 通过系统页面,通过调用工具函数,来实现业务的操作,生成对应的页面对象,页面对象类
- 测试代码: 基于测试需要,组件页面对象,实现核心流程的自动化执行,测试用例
- 测试数据: 为测试用例执行提供所需要的测试数据
- 提取系统的页面:
- 基于结构设计与页面的业务需求实现编码
yaml 文件的处理
用途:
- 用于做配置文件
- 配置全局的数据:环境变量,数据库信息,账号信息,日志的格式,报告的名称
- 用于写测试用例(接口自动化测试用例,用于数据驱动)
一、YAML的简介
yaml是一种数据格式,支持注释,换行,多行字符串,裸字符串(不可分割的,最最少的字符串)。
二. YAML 语法规则
- 大小写敏感(区分大小写)
- 使用缩进表示层级关系
- 缩进不管空格的数量,只要层级的左侧是对其的就ok
- 使用# 来表示注释
三. YAML 和json的差异
JSON
- Map对象:键值对。(字典)
- 使用{}括起来,如:{name:永乐,age:30}
- 数组,(列表list)
- 使用[]搓起来,如:[{name:永乐,age:10},{name:赵哥,age:11}]
YAML
-
Map 对象:建:(空格)键值对(字典dict)
- 如:
msxy:
name:永乐
age:18
一般的写法:{name:永乐,age:18}
- 如:
-
数组,(列表list),用一组横行“-”开头
如:
msxy:
-name:永乐
-age:18
一般的写法: msxy:[{name:永乐},{age:18}]
四. 读取和写入yaml文件
pyyaml 第三方模块
什么时候用date,什么时候用json
headers:content-ype:application/json 用json
headers:content-type:x-www-from-urleadcode