frame:python + pytest + requests + re
1. interface request mode:get、post、delete、put
Request mode get params:url、params
request mode post params:url、data、json
Request parameter type:键值对、json格式、文件格式
2. Test case management framework:unittest、pytest
First, install the Pytest and Requests packages:**pip install pytest;pip install requests.**
pytest默认规则:1、py文件必须以“test_”开头或者以“_test”结尾;2、类名必须以“Test”开头;3、测试用例必须以“test_”开头
3. Request parameter transmission mode
Point 1. Get request:通过params传参,如下:
Point 2. Post request:通过JSON和DATA传参,如下:
注:在post请求中,JSON传参和data传参的区别?
Data传参方式:当接口的数据报文为dict字典类型:那么默认情况下请求头:application/x-www-from-urlencoded,表示以from表单的方式传参,格式:a = 1 & b = 2 & c = 3当接口的数据报文为str字符串类型:那么默认情况下请求头:text/plain(如果dict字典格式转换成str字符串格式传参)
Json传参方式:此种格式传参的时候,接口的数据报文不论时dict字典格式还是str字符串格式,请求头都默认为application/json,格式:{“a”:1, “b”:2}
传参报文的格式转化:即序列化和反序列化的变化:序列化:json.dumps(data) 把字典格式转化成str格式;反序列化:json.loads(data) 把字符串格式转化成dict格式
Point 3. 总结如下:
- data传参只能传简单的只有键值对的dict格式{“a”:1, “b”:2}或者时str字符串格式;
- json传参只能穿dict字典格式,复杂的dict字典格式也能传参,如嵌套的字典{“ddd”:{“a”:”b”}}
- cookie鉴权:网页的接口基本上都要做
- 第一种方式,在登录接口设置cookie鉴权,如:
TestQueryWeather.cookies = rep.cookie
,其格式(类名.cookie变量名 = 返回结果.cookie) - 第二种方式,通过session实现cookie鉴权,这种常用
- 第一种方式,在登录接口设置cookie鉴权,如:
4. requests 自动化框架封装
Point 1. 统一接口请求方式:
核心的接口请求方式requests.request(“get/post”, url=url, data=data)
Point 2. pytest.ini
在根目录创建pytest.ini文件,到文件中添加配置,具体详情如下:[pytest]
addopts = -vs
: 配置运行方式testpaths = ./testcase
: 配置测试用例python_file = test_*.py
: 配置文件名python_classes = Test*
:# 配置类名前缀python_functions = test_*
: 配置方法前缀markers = :
对用例进行分组,在用例里面需要再冒烟用例进行标记
smoke:maoyan
Point 3. pytest plugins
- 首先在根目录下创建一个txt文件:requirements.txt
- 把所有的插件名称放到这个txt文件中(在此文件的第一行需要加上 pytest)
- pytest-html
- pytest-xdist
- pytest-ordering
- pytest-rerunfailures
- allure-pytest
- 然后再pycharm的终端输入:pip install -r requirements.txt
Point 4. 运行方式
- 主函数:使用main方式运行
- 命令行:在终端使用命令“pytest.main()”
Point 5. 前后置、夹具
setup/teardown
在每个用例之前或者之后执行一次
setup_class/teardown_class
在每个类之前或者之后执行一次- 部分前置:
@pytest.fixture(scope="作用域", params="数据驱动", autouse="自动执行", ids="自定义参数名", name="重命名")
作用域::function、class、module、package/session
3.1 @pytest.fixture()一般情况下会和conftest.py文件一起使用
- conftest.py文件名是固定的
- conftest.py文件是单独存放@pytest.fixture()的方法的文件,用处是多个py文件之间可以共享
- conftest.py文件里面的方法不需要导入,可以直接调用
- conftest.py文件可以有多个,也可以有多个不同层级