一、pytest简介
基于python的单元测试框架,和selenium、request、Appium结合实现自动化测试
实现用例跳过skip和reruns失败用例重跑
结合allure-pytest生成allure报告
和jenkins实现持续集成
主要是因为有很多强大的插件
pytest-html pytest-xdist pytest-ordering
pytest-rerunfailures allure-pytest
运行方式
1、主函数 ()
常用参数 -vs 输出更详细内容, --reruns=2 失败用例重跑
-x 表示出现一个失败就停止
-maxfail=2 出现2个失败就停止
--html=reports/
-n=2 表示分两个线程去跑用例
-k 运行测试用例中包含指定字符串的用例
可直接指定整个文件夹运行或整个模块运行或模块下的某个类及某个用例运行
2、命令行
3、配置文件 不管是主函数还是命令行都会读取配置文件(必用)
addopts = 参数 例如 addopts = -vs
testpaths 执行测试路径
python_file 寻找py文件的规则
python_classes 寻找类的规则
python_functions 寻找函数的规则
markers 冒烟测试
例 addopts = -vs -m 'smoke or productmanage'
markers =
smoke:冒烟测试
productmanage:商品管理
4、pytest默认执行顺序从上到下
@(orde=1) 可改变执行顺序
5、跳过测试用例
@(reason="无条件跳过")
@(age>2,reason=f"{age}以后版本不执行")
6、前后置
方法一:(无法指定某个用例)
def setup_method(self):
print("每个用例前")
def teardown_method(self):
print("每个用例后")
def setup_class(self):
print("每个类之前")
def teardown_class(self):
print("每个类之后")
方法二:fixtrue装饰器
@(scope="作用域",params="数据驱动",autoser="自动执行")
yield和return都可以返回值,return后不能接代码,yield可以接
# fixtrue固件当scope是方法级别时,只需要将方法名作为参数即可调用固件
# @("execute_sql") 类级别需要usefixtrues插件配合调用固件
params=数据(list,tuple,字典等) 用于数据驱动,接收params一组数据,数据作为参数传入固件的方法中并且参数变量固定request,params接受的数据有几组参数,则固件作用的地方便执行几次
例子:
def read_yaml():
return ['gwy','hsp','xwb']
@(scope="module",params=read_yaml(),autouse="True")
def execute_sql(request):
print("执行数据库的校验")
print(request)
yield
print("结束校验")
fixture级别为package、session时,一般和文件一起使用,作用:可以在多个包甚至多个py文件里面共享前后置,这个时候不能做数据驱动。conftest可以创建多个。并且conftest级别更高
7、pytest 断言
使用的python原生的断言assert
8、pytest结合allure-pytest生成报告
1、配置文件中加入--alluredir=reports/temps --clean-alluredir
2、main函数()后面沉睡几秒后加入 ("allure generate reports/temps -o reports/allure --clean")
第一步生成temps缓存,第二步生成allure报告
自动生成的allure报告不美观,自己定制allure报告
左边的定制
@() 项目名称
@() 模块名称
@() 接口名称
@() 测试用例标题
() 测试用例标题(适用数据驱动)
右边的定制
1、用例的严重程度
blocker:中断bug 致命bug 内存泄漏等
critical:临界bug 严重bug 功能未实现等
normal:一般缺陷 一般bug 条件查询有误等
minor:次要缺陷 提示bug 颜色搭配不好等
trivial:轻微缺陷 轻微bug 没有使用专业术语等
@(allure.severity_level.BLOCKER)
这个装饰器可修饰用例也可直接修饰类的严重程度
@() 测试用例描述
() 测试用例描述(适用数据驱动)
测试用例步骤的定制
with (): 测试步骤
附件的定制
web自动化附件
(三个参数) body附件内容 name=文件名attachment_type=文件扩展名
with open() as f:
(body,name,attachment_type)
接口自动化定制
将请求地址、请求方式、请求参数、响应结果一起定制
格式
(body,name,attachment_type)
企业里一般真实定制
项目名称、模块名称、接口名称、测试标题、严重级别、用例描述、(步骤、附件一般会封装)
9、allure报告如何在本地访问
通过启动服务打开allure报告(同一局域网即可通过地址访问)
allure open ./reports/allure
10、allure中的数据驱动装饰器
@("args_name",["ggg","hhh","xxx"])
def test_01_login(self,args_name)
print(args_name)
二、request库
发送http请求的第三方库
request库常用方法
requests.get() 通过params传参
() 通过data和json传参
请求头:
常用请求正文格式:multipart/form-data 文件上传
一般用于键值对和文件
常用请求正文格式:application/x-www-form-urlencoded 键值对
以表单格式传参
常用请求正文格式:raw
application/json json格式
request核心方法:
()
底层方法()
request()执行后返回res对象
、 ()、 res.status_code、 ()等