接口自动化测试框架【python+requests+pytest+excel/yaml+allure+jenkins】
一.在整个框架中需要用到哪些东西?
1.python环境安装
https://www.python.org/downloads/windows/
下载解压后直接安装,选择 Add python to path
2.JAVA环境配置
安装包下载地址:https://www.oracle.com/java/technologies/downloads/
环境变量设置参数如下:
● 变量名:JAVA_HOME
● 变量值:C:\Program Files\Java\jdk-22 java环境的安装路径
● 变量名:CLASSPATH
● 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
● 变量名:Path
● 变量值:%JAVA_HOME%\bin %JAVA_HOME%\jre\bin
3.requests库
requests是一个python的HTTP库,用于发送HTTP请求,支持HTTP认证、会话、上传文件、json处理等功能。
-
安装:pip install requests
-
1.发送get请求
如果get方法有参数,使用params传递参数,拼接到url中import requests response=requests.get("https://www.baidu.com") data={"key":"value"} response=requests.get("https://xxxx.com",params=data)
-
2.发送post请求
A.默认普通表单形式传参(x-www-form-urlencoded),放在data中import requests url="https://www.baidu.com" data={"username":"test001","password":"AAAAAA"} response=requests.post(url=url,data=data)
B1. 数据格式以json格式传参,原则上是要放在json参数中,也可以放在data中,需要注意设置请求头的参数格式为application/json,以及要将参数转换为json格式
import requests url="https://www.baidu.com" data={"username":"test001","password":"AAAAAA"} headers={"Content-Type":"application/json;charset=utf-8"} json_data=json.dumps(data) response=requests.post(url=url,headers=headers,data=json_data)
B2.以json格式传参,直接放在json参数中
import requests url="https://www.baidu.com" data={"username":"test001","password":"AAAAAA"} response=requests.post(url=url,headers=headers,json=data)
-
会话使用
requests中有一个requests.Session()创建一个回话对象,使用创建的session对象发起请求,可以跨请求时保留状态,和cookies同理session=requests.Session() session.post("http://xxxx.com",data=data)
-
错误处理
try: response=requests.post("http://xxx.com",data=data) except requests.exceptions.RequestException as e: print(e)
-
响应内容处理
`import requests` `response=requests.get("https://www.baidu.com")` `response_data=response.json()` `text=response.text`
-
上传文件
`import resuqets` `url="https://www.baidu.com"` `files={"file":open("example.txt","rb")}` `response=requests.post(url=url,file=files)`
4.pytest框架
pytest是一个第三方库,用于执行python测试的框架,它收集已经用python代码编写好的用例进行执行,断言、参数化、筛选用例,测试夹具,结合allure生成HTML报告、用例失败重跑、日志记录,持续集成、动态生成测试标题等。
安装 pip install pytest
1.参数化 @pytest.mark.parametrize("变量名","引用的变量的值")
将data中的每一行数据都通过参数化依次读取出来,在用例中使用
2.测试夹具 @pytest.fixture()
定义夹具:
使用夹具:在测试用例中引用这个夹具
`def test_01(login_fixture):`
` pass `
3.用例失败重跑机制,rerun表示重跑次数,reruns_delay是延迟时间,每次用例执行失败3s秒后再次重跑
`@pytest.mark.flaky(reruns=3, reruns_delay=3)`
5.pycharm安装
6.Allure安装配置
allure安装:https://github.com/allure-framework/allure2/releases
下载解压,将路径添加到环境变量中,例:D:\install\allure-2.27.0\allure-2.27.0\bin
在cmd中输入allure --version ,出现版本号既安装成功
pip install allure-pytest
1.用例添加标题:
给函数添加标题:
`@allure.title()`
2.用例添加步骤: @allure.step()
`with allure.step("第一步:xxxx"):`
缩进代码
`with allure.step("第二步:xxxx")`
缩进代码
3.添加附件到Allure报告
`@allure.step("查看用户列表")`
`def view_userlist():`
`response=requests.get("http://xxxx.com")`
`allure.attach(response.text,name="Userlist",attachment_type=allure.attachmentType.TEXT)`
4.为用例动态生成测试标题:固定写法,用例都放到excel文件,读取后将用例标题、模块等信息显示到用例执行信息中
二.框架需要安装的依赖包
https://www.cnblogs.com/tyl-bok/p/18194298
三.项目目录结构
四.方法封装
api_keyword关键字包
1.封装requests的请求方法
导入requests库(import requests),使用requests自身的get和post方法进行二次封装,放在关键字参数api_keyword.py的ApiKeys类中
2.封装从响应结果中提取数据的方法
从响应中提取数据需要使用json path进行提取,导入jsonpath(import json/import jsonpath)
-
jsonpath用来提取数据,jsonpath.jsonpath(参数1:响应数据response,参数2:需要提取的数据(json path表达式)),返回的数据类型是列表
-
json 用来转换数据格式(如果响应数据是字典格式的字符串,要转换为json格式),json.loads(响应数据)
注:这个方法提取到的数据是一个列表,且一次只能提取一个数据
3.封装从数据库提取数据的方法
1.连接数据库--------------->2.执行sql语句,获取结果(元组格式)
Common公共包
4.封装Excel文件方法(安装pip install openpyxl)
自动化测试用例相关信息都是放在Excel文件中,包括用例名称、用例标题、请求方法、请求参数、预期结果、实际结果、校验字段等,所以需要将Excel文件的数据读取出来进行测试
读取Excel文件,导入import openpyxl,封装读取和写入Excel文件的方法,放在common包的FileExcelRead.py中,类名为FileExcelRead
5.封装yaml文件方法(安装 pip install pyyaml)
读取yaml文件,导入import yaml,封装读取和写入yaml文件的方法,放在common包的FileYamlRead.py中,类名为FileYamlRead
6.封装接口加密方法AES(对称加密)
部分接口是加密接口,如果不对数据进行加密,就会报错,放在common包的Data_Encrypt_AES.py中,类名为Data_Encrypt
补位函数为什么要将需要加密的数据补位到16位,参考https://www.cnblogs.com/tyl-bok/p/18189589
data数据包
1.excel-----存放exce格式的数据
2.yaml-----存放yaml格式的数据
testcase用例包
存放项目的测试用例,在项目中, 一般是一个模块的测试用例放在一个目录下
config.py文件
常量配置文件,例如项目的url,数据库信息、账号密码等,这些一般在项目中不会变动,需要用的时候,直接引用这个变量即可
conftest.py文件
1.可以在项目中添加测试夹具,例如项目需要登录,不用每个测试用例前面都写登录操作,只用定义一个用于登录的夹具,在测试用例中直接引用这个夹具即可
2.项目要生成日志信息,需要使用钩子函数,结合pytest.ini文件实现日志生成
pytest.ini文件
主要用来对日志进行设置,打开日志开关,设置日志的表示格式,这个文件里面不能出现中文
run_main文件
pytest框架的用例执行入口,只要满足pytest的命名规则:
1.py文件必须以test_开头或者_test结尾
2.用例名称必须以test_开头
3.如果用例是放在类里面,类名必须以Test开头
在运行时,pytest会收集所有符合条件的用例进行执行
五.Git安装配置
详见https://www.cnblogs.com/tyl-bok/p/18150798
六.jenkins安装配置
代码存放在git仓库后,需要借助Jenkins工具固定一个时间跑用例
Jenkins是一个持续集成和交付的工具------>是一个长期将项目中的工作合并到流水线并且持续部署上线的工具(CICD)
1.下载地址:https://www.jenkins.io/download/#downloading-jenkins
2.下载完成,在jenkins的下载目录中输入cmd进入终端,输入java -jar jenkins.war启动服务(cmd命令行关闭即服务停止)
3.启动服务,浏览器访问http://127.0.0.1:8080,进入jenkins
4.jenkins默认登录账号admin,初始密码:cmd命令输入start . ,找到.jenkins文件夹--->secrets--->initialAdminPassword文件
1.jenkins拉取Git代码
进入jenkins,点击【新建item】,选择【Freestyle project】创建一个自由格式的项目,点击确定进入项目的配置页面
通过【源码管理】拉取Git仓库项目
1.配置Github项目地址
2.添加凭证信息
3.构建分支选择
jenkins在拉取Git项目时,默认的分支是master,如果自己github项目的分支是main,需要切换成main,不然会报错
4.配置完成后,对项目进行构建
5.运行成功后,进入项目,工作空间已存在git项目代码
2.jenkins实现定时构建项目
构建触发器
在【源码管理】--->【构建触发器】---->【Build periodically】
日程表填写语法: MINUTE HOUR DOM MONTH DOW 分 时 天 月 周
常用的:
H/15 * * * *
每隔15分钟运行一次
H 2 * * *
每天凌晨2点运行
H 8-17/2 * * *
每天8点-17点,2小时运行一次
H 8-17/2 * * 1-5
周一到周五,每天8点-17点,2小时运行一次