用户云卷云舒 发表于 2025-3-20 20:06:29

黑马客达天下-接口测试-Postman+Pytest+Allure+Jenkins实现连续集成

目录
项目简介
待测接口
测试流程
计划接口测试用例
合同新增业务
业务路径
剖析接口文档
接口测试用例
接口测试-合同
验证码接口
登录接口
验证码和登录接口关联
新增课程接口
合同上传接口
添加合同接口
合同列表接口
单接口测试
登录接口
提取测试点
计划测试用例
进行测试
断言简化测试
课程添加接口
提取测试点
计划测试用例
查询课程列表接口
提取测试点
计划测试用例
课程修改接口
提取测试点
计划测试用例
课程删除接口
提取测试点
计划测试用例
PostMan
批量实行
断言
相应码断言
包罗指定字符串断言
JSON数据断言
参数化
自定义变量
JSON
CSV
自动化
搭建情况
根本知识
代码实现验证码接口
代码实现登录接口
接口对象封装
代码实现课程新增接口
代码实现合同上传及合同新增接口
代码实现单接口测试-登录接口-JSON实现
自动化集成Allure
集成Jenkins
搭建Newman自动化测试情况
平常陈诉和增强版陈诉
Allure陈诉
通过Jenkins连续集成
自动构建包罗Allure天生陈诉的使命
配置Allure插件
创建使命
Postman使命运行后,postman_Allure使命随之运行

配套资料链接: 百度网盘 请输入提取码
项目简介

https://i-blog.csdnimg.cn/direct/44ab86a57a394c509ef5c8c9802fd55a.png
项目名称:客达天下项目类型:销售管理系统(CRM)项目特点:前后端分离、功能通用性强项目链接:客达天下/
https://i-blog.csdnimg.cn/direct/f08b517699f24e4a984174c940572dc3.png
待测接口



[*] 合同管理业务

[*] 登录
[*] 添加课程
[*] 上传合同
[*] 新增合同

[*] 课程管理模块

[*] 添加课程
[*] 修改课程
[*] 查询课程
[*] 删除课程

测试流程


[*] 接口文档剖析
[*] 计划测试用例
[*] 脚本开发
[*] 实行脚本
[*] 缺陷跟踪
[*] 测试陈诉
计划接口测试用例


[*] 根据流程图、找出业务路径
[*] 根据业务路径分析对应的接口哀求
[*] 将业务路径转化为接口测试用例
合同新增业务

合同新增流程图:
https://i-blog.csdnimg.cn/direct/dd259ce635e44d9abf6ff95aa5b5f115.png
业务路径

https://i-blog.csdnimg.cn/direct/56d46833ceee42408a6a6a701bd6ba9c.png
剖析接口文档

https://i-blog.csdnimg.cn/direct/2af3d3cf24cf401db942059717e855e9.png
https://i-blog.csdnimg.cn/direct/5332266f89a240f982a6e6ef0a0ff413.png
https://i-blog.csdnimg.cn/direct/dd2bbe8482444116867011543d6914a6.png
对新增合同接口文档进行分析,通过哀求中的参数(URL、哀求方法、哀求头、哀求参数类型、哀求参数等),计划测试用例
接口测试用例

https://i-blog.csdnimg.cn/direct/50ed3dc94e344319bb0197c840277e49.png
接口测试-合同

验证码接口

https://i-blog.csdnimg.cn/direct/020b23eae6134f5599ad6ff84adf873e.png
哀求路径:
http://kdtx-test.itheima.net/api/captchaImage 实现步骤:

[*] 设置哀求方式和接口地址
[*] 发送哀求
https://i-blog.csdnimg.cn/direct/ba0d8456c2db4d01bbb50c402eb84783.png
[*] 检察相应结果
https://i-blog.csdnimg.cn/direct/d115b62f8a764ca9a86de91a35cc3c05.png
登录接口

https://i-blog.csdnimg.cn/direct/0ff1a6e3aa864a8bae9ef1fb17ee2fc8.png
哀求路径:
http://kdtx-test.itheima.net/api/login 实现步骤:

[*] 设置哀求方式和接口地址
https://i-blog.csdnimg.cn/direct/59b35a234d064366b229e75ea8306d2a.png
[*] 设置哀求头
https://i-blog.csdnimg.cn/direct/688873f8d5b8407792a225706e530020.png
[*] 设置哀求体
https://i-blog.csdnimg.cn/direct/36beaeb3dc58449a91489120fa2d134c.png
[*] 发送哀求
[*] 检察相应结果
https://i-blog.csdnimg.cn/direct/18286013e65140b49dbf2c6517acd03b.png
验证码和登录接口关联

上文可知,登录接口的哀求体中包罗验证码接口的返回值,使用关联技术可以避免手动赋值
需求:

[*] 验证码接口:/api/captchaImage
[*] 登录接口:/api/login
[*] 登录接口哀求体uuid字段->验证码接口返回uuid字段
https://i-blog.csdnimg.cn/direct/eaf8b4183fa2407c815579fec095af0f.png
实现步骤:

[*] 创建Environments并添加变量 (此处设置为uuid)
https://i-blog.csdnimg.cn/direct/d1a98c3521d7402eac15b4144b5dfacf.png
[*] 创建Collection并设置情况
https://i-blog.csdnimg.cn/direct/dc06c242fe5147cda3966fca4faa77fc.pnghttps://i-blog.csdnimg.cn/direct/1401f53789134ce0a96dd030f124306b.png
[*] 添加对应哀求 Image、Login (与上文中验证码接口、登录接口同等)
https://i-blog.csdnimg.cn/direct/e4f426d2431e4472a724922b014e7e7a.png
[*] 验证码接口中配置tests
https://i-blog.csdnimg.cn/direct/44b32beceb694472a3b7e6325e62166c.png
[*] 登录接口中使用变量uuid
https://i-blog.csdnimg.cn/direct/040552696f3e495ba92349e4de839c98.png
[*] 检察相应结果
https://i-blog.csdnimg.cn/direct/b103e67b04db40be9e806722bda7b307.png
   需要先运验证码接口,在运行登录接口
新增课程接口

https://i-blog.csdnimg.cn/direct/6d4cdb53569b41eda08b662bd65bea84.png
哀求路径:
http://kdtx-test.itheima.net/api/clues/course 实现步骤:

[*] Environments中设置token
https://i-blog.csdnimg.cn/direct/d98f4dedbc20408daad38e1a55c21521.png
[*] 登录接口中设置tests
https://i-blog.csdnimg.cn/direct/6aec924733984ec3866c4944eefe23c0.png
[*] 创建对应哀求
https://i-blog.csdnimg.cn/direct/06125e4156094548a006c084c28ab549.pnghttps://i-blog.csdnimg.cn/direct/f9c7fe107a6742f9aff060f687ced457.png
[*] 发送哀求
[*] 检察相应结果
https://i-blog.csdnimg.cn/direct/4356664d399345ee8369273dfd6b11b7.png
合同上传接口

https://i-blog.csdnimg.cn/direct/af9f5005723f4e93abc406dd4da45b9a.png
https://i-blog.csdnimg.cn/direct/80f0d0a90dad4f249d390b2b69764ad4.png
哀求路径:
http://kdtx-test.itheima.net/api/common/upload 实现步骤:

[*] 创建对应哀求
https://i-blog.csdnimg.cn/direct/53cc8f25a51c4dbba6b87898ceb1a1d9.pnghttps://i-blog.csdnimg.cn/direct/77ecb8a47f2042ee823ea1d418d8097b.png
[*] 发送哀求并检察相应结果
https://i-blog.csdnimg.cn/direct/75f895c470ee4a319393f90650202542.png
添加合同接口

https://i-blog.csdnimg.cn/direct/ddcf02179ea7489d9956e092a082007e.png
https://i-blog.csdnimg.cn/direct/1bcb8b1eece644d2923c8d0ead50c352.png
哀求路径:
http://kdtx-test.itheima.net/api/contract 请求样例:
{
 "name":"测试接口21",
 "phone":"12222222222",
 "contractNo":"HT100120234",
 "subject":"6",
 "courseId":99,
 "channel":"0",
 "activityId":77,
 "fileName":"{{fileName}}"
} 实现步骤:

[*] Environments中设置fileName
https://i-blog.csdnimg.cn/direct/eb2adf56d28b4cebbb03939edc0f7757.png
[*] 合同上传接口设置Tests
https://i-blog.csdnimg.cn/direct/5c647bcd541549eda79177fedc82c2be.png
[*] 创建添加合同接口并设置对应属性
https://i-blog.csdnimg.cn/direct/02e895e2df764a99b6ddb443f1c63fb7.pnghttps://i-blog.csdnimg.cn/direct/2dd7c7380a2a409887f9579751522043.png
[*] 发送哀求并检察相应结果
https://i-blog.csdnimg.cn/direct/8a7061c212314e0fbce485f998ffe702.png
合同列表接口

https://i-blog.csdnimg.cn/direct/dd6b6e9b5db84a4e8c78be05bf6e249c.png
哀求路径:
http://kdtx-test.itheima.net/api/contract/list 实现步骤:

[*] 创建对应哀求
https://i-blog.csdnimg.cn/direct/30180f24a4db44da9397acd010bb0443.png
[*] 发送哀求并检察相应结果
https://i-blog.csdnimg.cn/direct/cb84656b53de444e9e890e45407ecea7.png
单接口测试

登录接口

https://i-blog.csdnimg.cn/direct/94968b237710473499186936a2fbdb84.png
哀求路径:
http://kdtx-test.itheima.net/api/login 需求:


[*] 已注册精确的用户名和密码,登录成功
[*] 用户名或密码错误,登录失败, 提示"用户名或密码错误"
提取测试点

https://i-blog.csdnimg.cn/direct/7f759d3d72594177a2388202eb4c47eb.png
计划测试用例

https://i-blog.csdnimg.cn/direct/ed9bd800f48f485eb3e9781b32c6d24e.png
进行测试


[*] 关联验证码接口(省略)
[*] 设置不同的哀求数据登录成功
https://i-blog.csdnimg.cn/direct/4e369e95f2ba489cb75a754670d127e1.png登录失败-用户名为空
https://i-blog.csdnimg.cn/direct/e5201ea8699c4b6586a4df4d19686cee.png登录失败-未注册用户名
https://i-blog.csdnimg.cn/direct/ff6a3a70c770451380b3d2cfcb9515ed.png
[*] 发送哀求并检察返回结果登录成功
https://i-blog.csdnimg.cn/direct/bdf170fb42884d4f904dd1c8d07b4711.png登录失败-用户名为空
https://i-blog.csdnimg.cn/direct/8172f74914f3444e917569d6e59aab8a.png登录失败-未注册用户名
https://i-blog.csdnimg.cn/direct/37ce30b95a5e4253a8856e3ee446211f.png
断言简化测试

在登录哀求的Tests种添加以下内容:
//断言 状态码为200
pm.test("Status code is 200", function () {
 pm.response.to.have.status(200);
});

//断言数据中包含 "成功"
pm.test("Body matches string", function () {
 pm.expect(pm.response.text()).to.include("成功");
});

//断言json返回数据中的msg值为 "操作成功"
pm.test("Your test name", function () {
 var jsonData = pm.response.json();
 pm.expect(jsonData.msg).to.eql("操作成功");
}); 发送哀求并检察相应结果:
https://i-blog.csdnimg.cn/direct/f353d5530dcf4e8fbc693cfa24733d29.png
课程添加接口

https://i-blog.csdnimg.cn/direct/8423cd1a6f8b411ba1a61b1b4fa77f04.png
哀求路径:
http://kdtx-test.itheima.net/api/clues/course 需求:


[*] 必填参数
[*]

[*] 课程名称 (不超过30个字符)
[*] 课程学科 (1位数字,0->java,1->前端,6->测试)
[*] 课程价格 (1-5位数字)
[*] 使用人群 (1位数字,1->小白,2->中级步伐员)

[*] 非必填参数
[*]

[*] 课程介绍 (不超过200个字符)

提取测试点

https://i-blog.csdnimg.cn/direct/8cdc634f2a424753ab21bb934d066a9f.png
计划测试用例

https://i-blog.csdnimg.cn/direct/133d117a34c04170ad5b0c46b1f442f9.png

查询课程列表接口

https://i-blog.csdnimg.cn/direct/110234ad3fe444e3a1cbf74006192f26.png
哀求路径:
http://kdtx-test.itheima.net/api/clues/course/list 需求:


[*] 支持课程名称、课程学科、课程价格、适用人群、课程介绍的单条件查询
[*] 支持课程名称、课程学科、课程价格、适用人群、课程介绍的组合条件查询
[*] 查询存在满足条件课程信息时,返回该课程信息
[*] 查询不存在满足条件课程信息时,返回空值
提取测试点

https://i-blog.csdnimg.cn/direct/d8db648461984059ae585a24ae8654a2.png
计划测试用例

https://i-blog.csdnimg.cn/direct/5b99b18446684b7789d402f7ac6d32a8.png

课程修改接口

https://i-blog.csdnimg.cn/direct/4e275f8f86254a748f04fb1fdf237916.png
哀求路径:
http://kdtx-test.itheima.net/api/clues/course 需求:


[*] 课程ID (数字、必填)
提取测试点

https://i-blog.csdnimg.cn/direct/a5fe2eaff313487c8136d8a2c24c81d6.png
计划测试用例

https://i-blog.csdnimg.cn/direct/0cf27e72bfd44141aa1d0216c413bc94.png
课程删除接口

https://i-blog.csdnimg.cn/direct/48c47111731f4a3cbf2f28d9178e44d7.png
哀求路径:
http://kdtx-test.itheima.net/api/clues/course/id 需求:


[*] 课程ID (数字、必填)
提取测试点

https://i-blog.csdnimg.cn/direct/43faa6fd03394650b832e639f6e698f6.png
计划测试用例

https://i-blog.csdnimg.cn/direct/5a633d39aeb44fd98d6442de69eb6db8.png

PostMan

批量实行

选中需要实行的Collections,点击运行按钮
https://i-blog.csdnimg.cn/direct/f792a3939ec2421fa497f17959245f28.png
选择要实行的哀求,点击右侧按钮实行
https://i-blog.csdnimg.cn/direct/30462a6318fa4e99bc02c4131107c192.png
断言

代替人工自动判断预期结果和实际结果是否同等
https://i-blog.csdnimg.cn/direct/3d282a6f477349a996d14db0dfdfcb1e.png
相应码断言

https://i-blog.csdnimg.cn/direct/82f6d1fdb55049eb85ab2a0cbbb2eee4.png
包罗指定字符串断言

https://i-blog.csdnimg.cn/direct/17d82e726c2147d08abcae60a1628788.png
JSON数据断言

https://i-blog.csdnimg.cn/direct/36bd5705c3424921b1a2de5ed68a5516.png
参数化

自定义变量

在Collections界面下的Variables页面卡中可以自定义变量
https://i-blog.csdnimg.cn/direct/bf6a16c972a145708fa05bf4ccb70f6d.png
之后可以使用 {{变量名}} 来使用
https://i-blog.csdnimg.cn/direct/d843c1c74a9247488537fc7a5cebec23.png
JSON

创建json文件,内容如下:
[
    {"username":"manager","password":123456,"status":200,"message":"成功","msg":"操作成功"},
    {"username":"admin","password":"HM_2023_test","status":200,"message":"成功","msg":"操作成功"}
] 使用批量运行的方式,选择创建的json文件
https://i-blog.csdnimg.cn/direct/f479d6966f894e079cc4c6d4112ca943.png
https://i-blog.csdnimg.cn/direct/a65b2f473c18410ebcddb074ff831587.png
可点击 Preview 按钮进行预览
https://i-blog.csdnimg.cn/direct/35a3224e0e1d46069d3d1bcf9e8f5a1b.png
修改哀求中的Tests (使用data.名称 的情势)
https://i-blog.csdnimg.cn/direct/f4c6dc945c7d4084984ee6d2743d6f74.png
在Body中使用{{变量名}}
https://i-blog.csdnimg.cn/direct/4b8d467560054c9d9b1b54abb5583c6d.png
批量运行
https://i-blog.csdnimg.cn/direct/9fb1e2dbe039455f99d2a330e3d1b4e1.png
CSV

创建json文件,内容如下:
username,password,status,message,msg
manager,123456,200,成功,操作成功
admin,HM_2023_test,200,成功,操作成功 别的配置同json
https://i-blog.csdnimg.cn/direct/3b1a1e52eadb4fc79e6d0205c43e847e.png




自动化

使用工具或代码代替人工对接口进行测试
接口自动化框架计划思路
https://i-blog.csdnimg.cn/direct/f1654e5b27c04df388b40fe4273b34fc.png
搭建情况



[*] 编程语言:python
[*] 测试框架:pytest


[*] 接口哀求:requests
https://i-blog.csdnimg.cn/direct/6a9d9ee09fe8473cb3ee6e37c02c050b.png
安装requests
pip install requests 查抄安装:
pip3 show requests https://i-blog.csdnimg.cn/direct/db496a2b3b614d69ab4704ab14d536d0.png
根本知识

Requests:
https://i-blog.csdnimg.cn/direct/593056a7a62040f39c06b1a119504410.png
Response:
https://i-blog.csdnimg.cn/direct/16dcf1a2c344483e832c98c61bfe01d9.png
代码实现验证码接口


[*] script文件夹下创建 ImageTest.py文件,添加以下内容
#获取图片验证码
import requests
#导包
import requests
#发送请求
response = requests.get(url="http://kdtx-test.itheima.net/api/captchaImage")

#查看响应
print(response.status_code)
print(response.text)
[*] 运行检察结果
https://i-blog.csdnimg.cn/direct/bb75c7473d72412f9dee60d7a9b5ca47.png
代码实现登录接口


[*] script文件夹下创建 LoginTest.py文件,添加以下内容
#登录接口
#导包
import requests
#发送请求
url="http://kdtx-test.itheima.net/api/login"
headers={
 "Content-Type":"application/json",
}
loginData={
 "username":"admin",
 "password":"HM_2023_test",
 "code":"2",
 "uuid":"37cb173d9c9245278ed786ce39ff974e"   #运行ImageTest.py得到其中的uuid
}
response = requests.post(url=url,headers=headers,json=loginData)

#查看响应
print(response.status_code)
print(response.text)
[*] 运行检察结果
https://i-blog.csdnimg.cn/direct/1e398091df664ff19630e99fca942be4.png

接口对象封装

安装Pytest
pip install pytest

==7.4.0

可能还需要以下配置:
pytest

的测试用例文件名需要以test_命名开头
pycharm导航栏鼠标移入file点击Settings,选择Settings-Tools-Python Integrated Tools,Tesing 下拉框 选 pytest

点击OK
[*] 在api文件夹下创建login.py文件,添加以下内容
import requests

# 创建接口类
class LoginAPI:
 # 初始化
 def __init__(self):
     # 指定url基本信息
     self.url_verify = "http://kdtx-test.itheima.net/api/captchaImage"
     self.url_login = "http://kdtx-test.itheima.net/api/login"

 # 验证码
 def get_verify_code(self):
     return requests.get(url=self.url_verify)

 # 登录
 def login(self, test_data):
     return requests.post(url=self.url_login, json=test_data)
[*] 在script目录下创建ContracTest.py文件,添加以下内容:
# 导包
from api.login import LoginAPI

# 创建测试类
class TestContract:
 # 初始化
 token = None

 # 前置处理
 def setup(self):
     # 实例化接口对象
     self.login_api = LoginAPI()

 # 后置处理
 def teardown(self):
     pass

 # 1、登录成功
 def test_login_success(self):
     # 获取验证码
     responseImage = self.login_api.get_verify_code()
     print(responseImage.status_code)
     print(responseImage.json())
     # 打印uuid数据
     print(responseImage.json().get("uuid"))

     # 登录
     login_data = {
         "username": "admin",
         "password": "HM_2023_test",
         "code": "2",
         "uuid": responseImage.json().get("uuid")
     }
     res_l = self.login_api.login(test_data=login_data)
     print(res_l.status_code)
     print(res_l.json())
[*] 运行检察相应结果
https://i-blog.csdnimg.cn/direct/e7367a5bda574d588e5bfd2a6772057f.png
代码实现课程新增接口


[*] 在api目录下创建course.py文件,添加以下内容
import requests
# 创建接口类
class CourseAPI:
 # 初始化
 def __init__(self):
     self.url_add_course = "http://kdtx-test.itheima.net/api/clues/course"
     self.url_select_course = "http://kdtx-test.itheima.net/api/clues/course/list"

 # 课程添加
 def add_course(self, test_data, token):
     return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})
[*] script目录下ContractTest.py文件添加以下内容
from api.login import LoginAPI
from api.course import CourseAPI
# 创建测试类
class TestContract:
 # 初始化
 token = None

 # 前置处理
 def setup(self):
     # 实例化接口对象
     self.login_api = LoginAPI()
     self.course_api= CourseAPI()

 # 后置处理
 def teardown(self):
     pass

 # 1、登录成功
 def test_login_success(self):
     # 获取验证码
     responseImage = self.login_api.get_verify_code()
     print(responseImage.status_code)
     print(responseImage.json())
     # 打印uuid数据
     print(responseImage.json().get("uuid"))

     # 登录
     login_data = {
         "username": "admin",
         "password": "HM_2023_test",
         "code": "2",
         "uuid": responseImage.json().get("uuid")
     }
     res_l = self.login_api.login(test_data=login_data)
     print(res_l.status_code)
     print(res_l.json())
     TestContract.token=res_l.json().get("token")#添加token
     print(TestContract.token)
 # 课程新增 方法
 def test_add_Course(self):
     add_data = {"name": "测试开发提升课01", "subject": "6", "price": 899, "applicablePerson": "2", "info": "测试开发提升课01"}
     response=self.course_api.add_course(test_data=add_data,token=TestContract.token)
     print(response.json())
[*] 运行检察相应结果
https://i-blog.csdnimg.cn/direct/8902732cbaae4124a7fb9dc809185c5b.png
代码实现合同上传及合同新增接口


[*] 在config.py文件中添加以下内容
import os

# 设置项目环境域名
BASE_URL = "http://kdtx-test.itheima.net"

# 获取项目根路径
BASE_PATH = os.path.dirname(__file__)
[*] 在api目录下创建contract.py文件,添加以下内容
import requests
import config
# 创建接口类
class ContractAPI:
 # 初始化
 def __init__(self):
     self.url_upload = config.BASE_URL + "/api/common/upload"
     self.add_contrat = config.BASE_URL + "/api/contract"

 # 合同上传接口
 def upload_contract(self, test_data, token):
     return requests.post(url=self.url_upload, files={"file": test_data}, headers={"Authorization":token})

 # 合同新增
 def add_contract(self, test_data, token):
     return requests.post(url=self.add_contrat, json=test_data, headers={"Authorization":token})
[*] 在script目录下的TestContract.py文件中追加下面的内容:
# 导包
from api.login import LoginAPI
from api.course import CourseAPI
from api.contract import ContractAPI
import config
# 创建测试类
class TestContract:
 # 初始化
 token = None
 fileName=None
 # 前置处理
 def setup(self):
     # 实例化接口对象
     self.login_api = LoginAPI()
     self.course_api= CourseAPI()
     self.contract_api = ContractAPI()

 # 后置处理
 def teardown(self):
     pass

 # 1、登录成功
 def test_login_success(self):
     # 获取验证码
     responseImage = self.login_api.get_verify_code()
     print(responseImage.status_code)
     print(responseImage.json())
     # 打印uuid数据
     print(responseImage.json().get("uuid"))

     # 登录
     login_data = {
         "username": "admin",
         "password": "HM_2023_test",
         "code": "2",
         "uuid": responseImage.json().get("uuid")
     }
     res_l = self.login_api.login(test_data=login_data)
     print(res_l.status_code)
     print(res_l.json())
     TestContract.token=res_l.json().get("token")#添加token
     print(TestContract.token)
 # 课程新增 方法
 def test_add_Course(self):
     add_data = {"name": "测试开发提升课01", "subject": "6", "price": 899, "applicablePerson": "2", "info": "测试开发提升课01"}
     response=self.course_api.add_course(test_data=add_data,token=TestContract.token)
     print(response.json())

 # 上传合同成功
 def test_upload_contract(self):
     self.test_login_success()# 前置条件:登录
     # 读取pdf文件数据
     # f = open("../data/test.pdf", "rb")
     f = open(config.BASE_PATH + "/data/1.txt", "rb")
     response = self.contract_api.upload_contract(test_data=f, token=TestContract.token)
     TestContract.fileName=response.json().get("fileName")
     print(response.json())

 # 合同新增成功
 def test_add_contract(self):
     self.test_upload_contract()#前置条件-上传合同
     # contractNo: 数据唯一
     add_data = {"name": "测试888", "phone": "13612345678", "contractNo": "HT20230007", "subject": "6",
                 "courseId": " 99", "channel": "0", "activityId": 77, "fileName": TestContract.fileName}
     response = self.contract_api.add_contract(test_data=add_data, token=TestContract.token)
     print(response.json())
[*] 运行检察相应结果
https://i-blog.csdnimg.cn/direct/8f4a092466864cdca8b2063aa7729c94.png       上传合同需要在data目录下存放对应的文件
    https://i-blog.csdnimg.cn/direct/574e6f14c20148838e417cd1921a21b4.png

代码实现单接口测试-登录接口-JSON实现

代码:
from api.login import LoginAPI
import pytest


import json
import config


# # 测试数据
# test_data = [
#     ("admin", "HM_2023_test", 200, '成功', 200),
#     ("", "123456", 200, '错误', 500),
#     ("jack666", "123456", 200, '错误', 500),
# ]

# 读取json文件
def build_data(json_file):
 # 定义空列表
 test_data = []
 # 打开json文件
 with open(json_file, "r",encoding='utf-8') as f:
     # 加载json文件数据
     json_data = json.load(f)
     # 循环遍历测试数据
     for case_data in json_data:
         # 转换数据格式[{},{}] ==> [(),()]
         username = case_data.get("username")
         password = case_data.get("password")
         status = case_data.get("status")
         message = case_data.get("message")
         code = case_data.get("code")
         test_data.append((username, password, status, message, code))
 # 返回处理之后测试数据
 return test_data


# 创建测试类
class TestLoginAPI:
 # 初始化
 uuid = None

 # 前置处理
 def setup(self):
     # 实例化接口类
     self.login_api = LoginAPI()
     # 获取验证码
     response = self.login_api.get_verify_code()
     print(response.json())
     # 提取验证码接口返回的uuid参数值
     TestLoginAPI.uuid = response.json().get("uuid")
     print(TestLoginAPI.uuid)

 # 后置处理
 def teardown(self):
     pass

 # 登录成功
 # @pytest

.mark.parametrize("username, password, status, message, code", build_data(json_file="../data/login.json"))
 @pytest

.mark.parametrize("username, password, status, message, code", build_data(json_file=config.BASE_PATH + "/data/login.json"))
 def test01_success(self, username, password, status, message, code):
     login_data = {
         "username": username,
         "password": password,
         "code": "2",
         "uuid": TestLoginAPI.uuid
     }
     response = self.login_api.login(test_data=login_data)
     # 断言响应状态码为200
     assert status == response.status_code
     # 断言响应数据包含'成功'
     assert message in response.text
     # 断言响应json数据中code值
     assert code == response.json().get("code") 运行结果:
https://i-blog.csdnimg.cn/direct/65ea61ea64574e3f8d67a3ef1fb4c66e.png

自动化集成Allure

下载地址:
GitHub:
https://github.com/allure-framework/allure2/releases
镜像源:
https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/ 解压并添加情况变量(bin目录)
检验安装
allure --version https://i-blog.csdnimg.cn/direct/92cb5313b4bc4fc5bd77aac0b1af5ef6.png
配置pytest

.ini文件,添加以下内容:
[pytest

]
addopts=-s --alluredir report
testpaths=./script
python_files=ContractTest.py
python_classes=Test*
python_functions=test*


运行pytest

:(终端中)
pytest

https://i-blog.csdnimg.cn/direct/b4bec7548d7e40b0846994e71217d3cc.png
然后可以看到report目录下天生了对应日志
https://i-blog.csdnimg.cn/direct/2d99ffc2be8c46e9ba1ab02e2dd1ddcb.png
天生Allure陈诉:在对应的路径下运行下面命令
allure serve report

https://i-blog.csdnimg.cn/direct/8900a647fca0484a92bc819e2d647e0c.png
运行之后会弹出网页,可以看到具体的测试陈诉
   堕落缘故原由:更新及删除的操纵需要指定对应的id,此处并未指定
https://i-blog.csdnimg.cn/direct/c303eabb3efa4266b80c958735314d99.png
https://i-blog.csdnimg.cn/direct/e7178b3d56f94977bae2f21e11aa11bc.png
https://i-blog.csdnimg.cn/direct/ceafca81f50b45899a64486742e503b0.png
https://i-blog.csdnimg.cn/direct/4eba73ca27464f4d976e77e55b9bda7a.png

集成Jenkins

   由于postman哀求中使用了断言,而且哀求中包罗接口验证的错误用例,故陈诉中存在的题目均在预期之内
搭建Newman自动化测试情况

Newman 是一个命令行工具,用于运行 Postman 集合。它答应你在命令行中自动化测试 API,并可以与连续集成和连续摆设(CI/CD)流程集成 相关操纵
https://i-blog.csdnimg.cn/direct/5d0da4d0897b437a8c94166f6886e1c4.png
首先要安装node.jscmd中实行下面命令 验证是否精确安装:
node -v


https://i-blog.csdnimg.cn/direct/c1cc8fb9d284438eb88d284858b899e8.png
运行下面命令安装newman:
npm install -g newman


之后运行下面命令验证是否精确安装:
newman -v


https://i-blog.csdnimg.cn/direct/ff7f97ed67224465a0d601eecf394253.png
然后导出我们的测试文件
https://i-blog.csdnimg.cn/direct/e4860dd5256445c7a41fe69ec05f9e24.png
使用cmd进入到测试文件所在目录,运行以下命令
newman run .\Postman.json --reporters cli


https://i-blog.csdnimg.cn/direct/0a42523c253141deb40cdbd32f3170b6.png
平常陈诉和增强版陈诉

#导入陈诉模块##平常npm install -g newman


-reporter-html##增强版npm install -g newman


-reporter-htmlextra#运行下面命令 天生陈诉(HTML)newman run Postman.json -r html,htmlextra --reporter-html-export --reporter-html-export html1.html --reporter-htmlextra-export html2.html https://i-blog.csdnimg.cn/direct/4bcc46d69674430da2ec4f825624f56d.png
平常版html
https://i-blog.csdnimg.cn/direct/3966470088724c08a8484332bd0431f8.png
增强版html
https://i-blog.csdnimg.cn/direct/446c58b2e7d14488a258f52c133bae0e.png
会发现:此页面样式错误,缘故原由是引用的js文件在国外解决方法:手动修改对应的js文件
https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css
修改为
https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.1/css/bootstrap.min.css


https://i-blog.csdnimg.cn/direct/b503159cae084534b33c7264b34edfe5.png
Allure陈诉

#运行下面命令安装依赖
npm install newman-reporter-allure -g
#运行下面命令生成results
newman run Postman.json --reporters allure --reporter-allure-export allure-results
#运行下面命令查看 报告
allure serve


https://i-blog.csdnimg.cn/direct/2d155e64aba64f2a95f6757798186d26.png
通过Jenkins连续集成

官网:Jenkins/
安装好之后,cmd进入对应文件夹中运行下面命令
java -jar -Dfile.encoding=UTF-8 jenkins.war


进入之后,我们点击左侧的新建Item创建使命
https://i-blog.csdnimg.cn/direct/1b67ba07bf504b23b1275da8bec108a6.png
输入使命名称、选择 Freestyle project
https://i-blog.csdnimg.cn/direct/3618b8822a5d4e28a55d624dc4305411.png
选中Build perodiaclly 设置以下内容:
#每分钟执行一次
* * * * *


Build Steps中选择ExecuteWindowsbatchcommand 来实行我们的cmd命令
call newman run D:\newman\Postman.json --reporters cli
exit 0


https://i-blog.csdnimg.cn/direct/a30f34f485a74cfa98c141454cd460fb.png
之后会发现,每分钟都会构建
https://i-blog.csdnimg.cn/direct/685ca3c186174270a21a6927e303d84e.png
检察控制台输出可以发现
https://i-blog.csdnimg.cn/direct/6e34e9b7bd0d4aef83de20c796fce653.png
自动构建包罗Allure天生陈诉的使命

至此,已经实现了定时构建,下面我们实验以下内容:当newman构建时(模仿开发上传新代码等),自动构建包罗Allure天生陈诉的使命
配置Allure插件

网站:Index of /jenkins/plugins/allure-jenkins-plugin/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror/
下载插件之后,进入下面界面安装
https://i-blog.csdnimg.cn/direct/c2338f2332b449809d93532fd0c53b00.png
选择刚才下载的文件之后,点击摆设
https://i-blog.csdnimg.cn/direct/8350d3ac10514e9281971962cb06bb9d.png
重启Jenkins即可
创建使命

同样的,我们创建新的使命
https://i-blog.csdnimg.cn/direct/15427b3a0a7649b8b75cc844a208df01.png
https://i-blog.csdnimg.cn/direct/22bc0e5fbdb54cf68ef7d4ba62685214.png
在构建触发器部分,配置下面的内容
https://i-blog.csdnimg.cn/direct/c9a4c7dc8c0e4dd787f6cc81114106d4.png
Build Steps部分,我们仍选择windows命令行,输入以下内容
## call md allure-results 可不加
call newman run D:\newman\Postman.json --reporters cli,allure --reporter-allure-export allure-results
exit 0


添加构建后操纵
https://i-blog.csdnimg.cn/direct/d77a3530fe9c45f18cf7fe849c178858.png
https://i-blog.csdnimg.cn/direct/a2fa19a51c4b4b3fb7437efe372dec39.png
   留意这两个路径是有要求的,相对于工作目录。
results目录与上方命令中的目录是同等的,不然会出现陈诉没有数据的情况
Postman使命运行后,postman_Allure使命随之运行

https://i-blog.csdnimg.cn/direct/fe83b8396f484f1ca156ec3bb00b7a52.png
https://i-blog.csdnimg.cn/direct/6b5fb56495bd43d9801d24ee08bbb400.png
https://i-blog.csdnimg.cn/direct/e78ba44217c5455cae24f5c3e627c9fb.png
检察Allure Report陈诉如下
https://i-blog.csdnimg.cn/direct/556d9ea96faa45e99e3d47ea1b7835a7.png

   此处图标为!指测试中有失败样例(与测试用例有关),至此,实现了Jenkins+Allure自动化测试陈诉的连续集成

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 黑马客达天下-接口测试-Postman+Pytest+Allure+Jenkins实现连续集成