1. 安装pytest pip insatll pytest
2.安装allure (需要确保安装了jdk环境)
安装allure命令行: 访问allure官网,下载allure2.13.5的安装包,将其bin路径
添加进环境变量path中
在cmd里面输入allure version来进行版本的安装
-
定义:将接口测试过程中常用的操作和验证封装成可复用的关键字 (或称为函数、方法),以提高测试代码的可维护性和可复用性
-
接口关键字封装方式
-
发送请求 2.提取数据
from urllib import response
import requests
import jsonpath
import json
#关键字驱动
#发送请求 ,8种 post/get
class Apikey():
def get(self,url,params=None,**kwargs):
"""
:param url: 请求的URL
:param params: 需要拼装在URL当中的参数
:param kwargs: 其它参数,具体参考requests.post()
:return: 响应数据
"""
return requests.get(url=url,params=params,**kwargs)
#发送post请求
def post(self,url, data=None, json=None, **kwargs):
"""
:param url: 请求的URL
:param data: 请求参数
:param json: json格式请求数据
:param kwargs: 其他参数
:return: 响应数据
"""
return requests.post(url=url,data=data,json=json,**kwargs)
#提取数据 数据源{msg:"登陆成功" } jsonpath:$.msg
def get_text(self,response,key):
"""
:param response: 响应数据
:param key: 关键字
:return: 返回
"""
value_list = jsonpath.jsonpath(response, key)
return value_list[0]
#函数入口
if __name__ == '__main__':
"""
1.实例化对象
2.通过对应类调用对应方法
3.提取数据
"""
ak=Apikey()
#准备好四要素
# 模拟登陆接口请求
data = {
"accounts": "hami",
"pwd": "123456",
"type": "username"
}
params = {
"application": "app",
"application_client_type": "weixin",
}
res = ak.post(url="http://shop-xo.hctestedu.com/index.php?s=api/user/login",params=params, data=data)
print("响应数据:",res.json())
#提取数据
text=ak.get_text(res.json(), "$.msg")
print("提取数据:",text)






-
当一个用例里面调用多个接口时,这样语法更加简洁,生成的报告有对应层级关系
@allure.title("测试用例标题")
def test_case_name():
with allure.step("第一步:XXXXX接口"):
# 具体的接口请求代码
with allure.step("第二步:XXXXX接口"):
# 具体的接口请求代码
"""
-
一个方法中对应的变量是可以调用的
-
不同方法中的变量,可以设置对应的全局变量去进行调用(先定义后赋值)

-
有时候某个变量全局都需要使用。利用pytest的测试夹具对应实现(固定命名 conftest.py)


-
固定变量不会进行修改---常量命名需要大写,用一个文件去维护


import logging
# 设置全局日志级别为DEBUG
logging.basicConfig(level=logging.DEBUG,format="%(asctime)s %(levelname)s %(filename)s (%(lineno)d) : %(message)s ")
logging.debug("debug信息")
logging.info("info信息")
logging.warning("warning信息")
logging.error("error信息")
logging.critical("critical信息")
import logging
file = open("log.log", mode="a", encoding="utf-8")
# 设置全局日志级别为DEBUG
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(levelname)s %(filename)s
(%(lineno)d) : %(message)s ",stream=file)
logging.debug("debug信息")
logging.info("info信息")
logging.warning("warning信息")
logging.error("error信息")
logging.critical("critical信息")
-
pytest是日志开关 pytest.ini(不能改名字,不能在文件里面写中文)

日志格式化:
%(asctime)s :字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(levelname)s : 打印日志级别名称
%(filename)s : 打印当前执行程序名
%(lineno)d : 打印日志的当前行号
%(message)s : 打印日志信息
-
需要每个测试用例都产生对应日志信息 :测试夹具--在conftest里面(当执行一个case会自动调用这个方法,把数据传过来给到call,yield生成器相当于返回对象,调用完成后会回到调用的方法这;而return会返回对象后不回到调用方法这)
