-
安装准备
安装好pytest的环境及allure环境
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)
案例二:得到数据是字符串,调用方法时怎么实现?
在框架的应用
-
pytest+allure进行报告优化
@allure.step("生成对应测试步骤)
@allure.title("测试用例标题“)
当一个用例里面调用多个接口时,这样语法更加简洁,生成的报告有对应层级关系
@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是日志开关 pytest.ini(不能改名字,不能在文件里面写中文)
日志格式化: %(asctime)s :字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 %(levelname)s : 打印日志级别名称 %(filename)s : 打印当前执行程序名 %(lineno)d : 打印日志的当前行号 %(message)s : 打印日志信息
需要每个测试用例都产生对应日志信息 :测试夹具--在conftest里面(当执行一个case会自动调用这个方法,把数据传过来给到call,yield生成器相当于返回对象,调用完成后会回到调用的方法这;而return会返回对象后不回到调用方法这)