文章目录
- 前言
- 一.项目简介
- 二.合同管理业务接口对象封装和调用
- 1、实现登录接口对象封装和调用
- 1.0 登录接口的接口测试文档
- 1.1 接口对象层(封装)
- 1.2 测试脚本层(调用)
- 2、课程新增接口对象封装和调用
- 2.0 课程新增接口的接口测试文档
- 2.1 接口对象层(封装)
- 2.2 测试脚本层(调用)
- 3、合同上传接口对象封装和调用
- 3.0 合同上传的接口测试文档
- 3.1 接口对象层(封装)
- 3.2 测试脚本层(调用)
- 4、合同新增接口对象封装和调用
- 2.0 合同新增接口的接口测试文档
- 2.1 接口对象层(封装)
- 2.2 测试脚本层(调用)
- 三.课程管理核心功能接口自动化测试
- 1、课程添加单接口自动化测试
- 1.1 课程添加单接口文档信息
- 1.2 课程添加成功
- 1.3 课程添加失败(未登录)
- 2、课程查询单接口自动化测试
- 2.1 课程查询单接口文档信息
- 2.2 课程查询成功
- 2.3 课程查询失败(用户未登录)
- 3、课程修改单接口自动化测试
- 3.1 课程修改单接口文档信息
- 3.2 课程修改成功
- 3.3 课程修改失败(用户未登录)
- 4、课程删除单接口自动化测试
- 4.1 课程删除单接口文档信息
- 4.2 课程删除成功
- 4.3 课程删除失败(用户名为空)
- 总结
前言
一、项目简介
(1)项目名称:销售通(2)项目类型:销售管理系统(CRM)(3)项目角色:销售人员、销售经理、财务人员等(4)项目业务:线索管理、合同管理、课程管理、课程管理、活动管理等业务。
我负责的接口待测接口业务:
需求:完成合同管理业务及相关单模块接口测试。(1)合同管理业务
- 登录
- 添加课程
- 上传合同
- 新增合同
(2)课程管理模块
- 添加课程
- 修改课程
- 查询课程
- 删除课程
二.合同管理业务接口对象封装和调用
1、实现登录接口对象封装和调用
1.0 登录接口的接口测试文档
接口信息:
1.验证码:
(1)地址:http://kdtx-test.itheima.net/api/captchaImage
(2)方法:get
2.登录:(1)地址:http://kdtx-test.itheima.net/api/login
(2)方法:Post
(3)请求数据:
(4)请求头:Content-Type: application/json
(5)请求体:{"username": "admin", "password": " admin123","code":"2", "uuid":"验证码接口返回数据"}
1.1 接口对象层(封装)
封装的重要概念:
接口封装时,重点是依据接口文档封装接口信息,需要使用的测试数据是从测试用例传递的、接口方法被调用时需要返回对应的响应结果。封装是通过根据接口API文档封装,所以定义在API的目录下。
实现的基本步骤:
(1)导包操作:# 导包 import requests
(2)创建接口的类:
# 创建接口类 class LoginAPI:
(3)创建初始化方法:
初始化方法中需要指定接口的基本信息url。
# 初始化 def __init__(self): # 指定url基本信息 self.url_verify = "http://kdtx-test.itheima.net/api/captchaImage" self.url_login = "http://kdtx-test.itheima.net/api/login"
(4)创建验证码、登录方法:
接口方法被调用时候,需要返回对应的响应结果信息。只有返回之后,才能在测试用例中使用倒响应结果的值。
# 验证码接口方法 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)
备注:
(1)登录接口方法中的test_data。
因为要从外部传入测试数据,所以在方法定义时候创建一个参数来接收传递的数据。
(2)json = test_data
此处数据是请求体json中的数据。
因为json数据的请求体在request格式中是通过json参数进行处理。即:json = test_data.
实现图示说明:
1.2 测试脚本层(调用)
测试脚本层说明:
- 重点关注测试数据准备和断言
- 重点关注业务流程的处理
- 直接调用接口对象层发送请求
实现的基本步骤:
(1)导包:
导入调用接口对象层中定义的登录接口api.login# 导包 from api.login import LoginAPI import pytest
(2)创建测试类:
测试类一般以Test开头进行命名。# 创建测试类 class TestLoginAPI:
(3)设置前置处理和后置处理
前置处理中先实例化一个登录接口的对象
# 前置处理 def setup(self): # 实例化接口对象 self.login_api = LoginAPI() # 后置处理 def teardown(self): pass
(4)创建登录成功方法,并实现获取验证码和登录操作
# 1、登录成功 def test01_login_success(self): # 获取验证码 res_v = self.login_api.get_verify_code() print(res_v.status_code) print(res_v.json()) # 打印uuid数据 print(res_v.json().get("uuid")) # 登录 login_data = { "username": "admin", "password": "HM_2023_test", "code": "2", "uuid": res_v.json().get("uuid")# 此处调用验证码中的uuid数据 } res_l = self.login_api.login(test_data=login_data) print(res_l.status_code) print(res_l.json())
实例图示说明:
输出结果:
2、课程新增接口对象封装和调用
2.0 课程新增接口的接口测试文档
接口信息:
(1)URL:http://kdtx-test.itheima.net/api/clues/course
(2)方法:Post
(3)请求数据:
(4)请求头:{ "Content-Type ": "application/json ", "Authorization": "xxx " }
(5)请求体:{ "name": "测试开发提升课01", "subject": "6","price": 899,"applicablePerson": "2", "info": "测试开发提升课01"}
2.1 接口对象层(封装)
封装的重要概念:
接口封装时,重点是依据接口文档封装接口信息,需要使用的测试数据是从测试用例传递的、接口方法被调用时需要返回对应的响应结果。封装是通过根据接口API文档封装,所以定义在API的目录下。
实现的基本步骤:
(1)导包操作:# 导包 import requests
(2)创建接口的类:
# 创建接口类 class CourseAPI:
(3)创建初始化方法:
初始化方法中需要指定接口的基本信息url。
# 初始化 def __init__(self): # 指定url基本信息 self.url_add_course = "http://kdtx-test.itheima.net/api/clues/course"
(4)创建课程添加方法:
接口方法被调用时候,需要返回对应的响应结果信息。只有返回之后,才能在测试用例中使用倒响应结果的值。
此处方法中定义了test_data, token都是需要从外部接收的数据,所以最终的返回里面也要有响应结果的值。如test_data是json格式的,token是headers格式中的数据。
def add_course(self, test_data, token): return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})
2.2 测试脚本层(调用)
实现的基本步骤:
(1)导包:
导入调用接口对象层中定义的登录接口api.login# 导包 import pytest from api.course import CourseAPI
(2)创建测试类:
测试类一般以Test开头进行命名。# 创建测试类 class TestContractBusiness: # 初始化 token = None
(3)设置前置处理和后置处理
前置处理中先实例化一个登录接口的对象
# 前置处理 def setup(self): # 实例化接口对象 self.course_api = CourseAPI() # 后置处理 def teardown(self): pass
(4)创建课程新增方法,并实现课程新增操作
# 2、课程新增成功 def test02_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=TestContractBusiness.token)
# 提取登录成功之后的token数据并保存在类的属性中 TestContractBusiness.token = res_l.json().get("token")
3、合同上传接口对象封装和调用
3.0 合同上传的接口测试文档
接口信息:
(1)URL: http://kdtx-test.itheima.net/api/common/upload
(2)方法:Post
(3)请求数据:
(4)请求头:{ "Content-Type ": " multipart/form-data ", "Authorization": "xxx " }
(5)请求体:{" file " : 合同文件"}
思考:
① 如何提交multipart/form-data数据?
通过使用:
requests.请求方法(url, data=None, json=None, headers=None, files=None)
步骤① 读取文件数据
f = open(" test.pdf ", " rb ")
步骤② 设置请求数据
response = requests.post(url=xxx, files= {" file " : f"})
3.1 接口对象层(封装)
实现的基本步骤:
(1)导包操作:# 导包 import requests
(2)创建接口的类:
# 创建接口类 class ContractAPI:
(3)创建初始化方法:
初始化方法中需要指定接口的基本信息url。
# 初始化 def __init__(self): self.url_upload = "http://kdtx-test.itheima.net/api/common/upload"
(4)创建课程添加方法:
接口方法被调用时候,需要返回对应的响应结果信息。只有返回之后,才能在测试用例中使用倒响应结果的值。
# 合同上传接口 def upload_contract(self, test_data, token): return requests.post(url=self.url_upload, files={"file": test_data}, headers={"Authorization": token})
3.2 测试脚本层(调用)
实现的基本步骤:
(1)导包:
导入调用接口对象层中定义的登录接口api.login# 导包 import pytest from api.contract import ContractAPI
(2)创建测试类:
测试类一般以Test开头进行命名。# 创建测试类 class TestContractBusiness: # 初始化 token = None
(3)设置前置处理和后置处理
前置处理需要先处理验证码获取和登录接口操作,依次为前提才能进行文件上传。
# 前置处理 def setup(self): # 实例化接口对象 self.login_api = LoginAPI() self.course_api = CourseAPI() self.contract_api = ContractAPI() # 1、登录成功 def test01_login_success(self): # 获取验证码 res_v = self.login_api.get_verify_code() print(res_v.status_code) print(res_v.json()) # 打印uuid数据 print(res_v.json().get("uuid")) # 登录 login_data = { "username": "admin", "password": "HM_2023_test", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) print(res_l.status_code) print(res_l.json()) # 提取登录成功之后的token数据并保存在类的属性中 TestContractBusiness.token = res_l.json().get("token") print(TestContractBusiness.token) # 后置处理 def teardown(self): pass
(4)创建合同上传方法,并实现合同上传操作
# 3、上传合同成功 def test03_upload_contract(self): # 读取pdf文件数据 f = open("../data/test.pdf", "rb") response = self.contract_api.upload_contract(test_data=f, token=TestContractBusiness.token) print(response.json())
4、合同新增接口对象封装和调用
4.0 合同新增接口的接口测试文档
接口信息:
新增合同:
(1)url地址:http://kdtx-test.itheima.net/api/contract
(2)方法:Post
(3)请求数据:
(4)请求头:{ "Content-Type ": "application/json ", "Authorization": "xxx " }
(5)请求体:{ "name": "测试888", "phone": "13612345678", "contractNo": "HT10012003",
"subject": "6", "courseId": " 99", "channel": "0", "activityId": 77, "fileName": "xxx"}
4.1 接口对象层(封装)
封装的重要概念:
接口封装时,重点是依据接口文档封装接口信息,需要使用的测试数据是从测试用例传递的、接口方法被调用时需要返回对应的响应结果。封装是通过根据接口API文档封装,所以定义在API的目录下。
实现的基本步骤:
(1)导包操作:# 导包 import requests
(2)创建接口的类:
# 创建接口类 class ContractAPI:
(3)创建初始化方法:
初始化方法中需要指定接口的基本信息url。
# 初始化 def __init__(self): self.add_contrat = "http://kdtx-test.itheima.net/api/contract"
(4)创建合同添加方法:
接口方法被调用时候,需要返回对应的响应结果信息。只有返回之后,才能在测试用例中使用倒响应结果的值。
此处方法中定义了test_data, token都是需要从外部接收的数据,所以最终的返回里面也要有响应结果的值。如test_data是json格式的,token是headers格式中的数据。
# 新增合同接口 def add_contract(self,test_data,token): return requests.post(url=self.add_contrat,json=test_data,headers={"Authorization": token})
4.2 测试脚本层(调用)
实现的基本步骤:
(1)导包:
导入调用接口对象层中定义的登录接口api.login# 导包 import pytest from api.contract import ContractAPI
(2)创建测试类:
测试类一般以Test开头进行命名。# 创建测试类 class TestContractBusiness: # 初始化 token = None
(3)设置前置处理和后置处理
前置处理中先实例化一个登录接口的对象
# 前置处理 def setup(self): # 实例化接口对象 self.contract_api = ContractAPI() # 后置处理 def teardown(self): pass
(4)创建课程新增方法,并实现课程新增操作
# 4、新增合同成功 def test04_add_contract(self): add_contract = {"name": "测试888", "phone": "13612341888", "contractNo": "HT20026194", "subject": "6", "courseId": 99, "channel": "0", "activityId": 77, "fileName": "/profile/upload/2023/01/05/86e5a3b8-b08c-470c-a17d-71375c3a8b9f.pdf" } response = self.contract_api.add_contract(test_data=add_contract, token=TestContractBusiness.token) print(response.json())
# 提取登录成功之后的token数据并保存在类的属性中 TestContractBusiness.token = res_l.json().get("token")
1.1 登录单接口文档信息
需求:
- 完成测试脚本的业务实现
- 针对响应结果进行断言
1.2 登录成功
登录成功接口文档信息:
登录成功测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理
# 导包 from api.login import LoginAPI # 创建测试类 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
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:创建登录成功方法,并实现获取验证码和登录操作
# 登录成功 def test01_success(self): login_data = { "username": "manager", "password": "123456", "code": "2", "uuid": TestLoginAPI.uuid } response = self.login_api.login(test_data=login_data)
步骤3:针对响应结果进行断言
# 断言响应状态码为200 assert 200 == response.status_code # 断言响应数据包含'成功' assert '成功' in response.text # 断言响应json数据中code值 assert 200 == response.json().get("code")
断言依据:
1.3 登录失败(用户名为空)
登录失败(用户名为空)文档信息:
登录成功测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI # 创建测试类 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
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:创建登录失败(用户名为空)方法
# 登录失败(用户名为空) def test02_without_username(self): login_data = { "username": "",//此处用户名设置为空 "password": "123456", "code": "2", "uuid": TestLoginAPI.uuid } response = self.login_api.login(test_data=login_data)
步骤3:针对响应结果进行断言
# 断言响应状态码为200 assert 200 == response.status_code # 断言响应数据包含'错误' assert '错误' in response.text # 断言响应json数据中code值 assert 500 == response.json().get("code")
断言依据:
三.课程管理核心功能接口自动化测试
1、课程添加单接口自动化测试
1.1 课程添加单接口文档信息
需求:
完成测试脚本的业务实现
针对响应结果进行断言
1.2 课程添加成功
课程添加成功成功测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI from api.course import CourseAPI # 创建测试类 class TestCourseAPI: # 初始化 TOKEN = None # 前置处理 def setup(self): # 初始化接口类 self.login_api = LoginAPI() self.course_api = CourseAPI() # 登录成功 # 获取验证码 res_v = self.login_api.get_verify_code() # 登录 login_data = { "username": "admin", "password": "admin123", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) # 提取登录成功的token数据并保存 TestCourseAPI.TOKEN = res_l.json().get("token") print(TestCourseAPI.TOKEN) # 后置处理 def teardown(self): pass
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:创建课程添加成功方法
# 课程添加成功 def test01_add_success(self): add_data = { "name": "测试开发提升课01", "subject": "6", "price": 899, "applicablePerson": "2" } response = self.course_api.add_course(test_data=add_data, token=TestCourseAPI.TOKEN) print(response.json())
步骤3:针对响应结果进行断言
# 断言响应状态码 assert 200 == response.status_code # 断言返回数据中包含指定的文字 assert "成功" in response.text # 断言json返回数据code值 assert 200 == response.json().get("code")
断言依据:
1.3 课程添加失败(未登录)
课程添加失败(未登录)测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI from api.course import CourseAPI # 创建测试类 class TestCourseAPI: # 初始化 TOKEN = None # 前置处理 def setup(self): # 初始化接口类 self.login_api = LoginAPI() self.course_api = CourseAPI() # 登录成功 # 获取验证码 res_v = self.login_api.get_verify_code() # 登录 login_data = { "username": "admin", "password": "admin123", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) # 提取登录成功的token数据并保存 TestCourseAPI.TOKEN = res_l.json().get("token") print(TestCourseAPI.TOKEN) # 后置处理 def teardown(self): pass
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:创建课程添加失败(未登录)
# 课程添加失败(未登录) def test02_add_fail(self): add_data = { "name": "测试开发提升课02", "subject": "6", "price": 899, "applicablePerson": "2" } response = self.course_api.add_course(test_data=add_data, token="xxx") print(response.json())
步骤3:针对响应结果进行断言
# 断言响应状态码 assert 200 == response.status_code # 断言返回数据中包含指定的文字 assert "认证失败" in response.text # 断言json返回数据code值 assert 401 == response.json().get("code")
断言依据:
2、课程查询单接口自动化测试
2.1 课程查询单接口文档信息
需求:
完成测试脚本的业务实现
针对响应结果进行断言
2.2 课程查询成功
课程查询成功测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI from api.course import CourseAPI # 创建测试类 class TestCourseAPI: # 初始化 TOKEN = None # 前置处理 def setup(self): # 初始化接口类 self.login_api = LoginAPI() self.course_api = CourseAPI() # 登录成功 # 获取验证码 res_v = self.login_api.get_verify_code() # 登录 login_data = { "username": "admin", "password": "admin123", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) # 提取登录成功的token数据并保存 TestCourseAPI.TOKEN = res_l.json().get("token") print(TestCourseAPI.TOKEN) # 后置处理 def teardown(self): pass
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:创建课程查询成功
# 查询存在的课程 def test01_select_success(self): response = self.course_api.select_course(test_data="?name=测试开发提升课01", token=TestCourseAPI.TOKEN) print(response.json())
步骤3:针对响应结果进行断言
# 断言响应状态码 assert 200 == response.status_code # 断言msg中包含指定的文字 assert "成功" in response.text # 断言json返回数据中code值 assert 200 == response.json().get("code")
断言依据:
2.3 课程查询失败(用户未登录)
课程查询失败(用户未登录)测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI from api.course import CourseAPI # 创建测试类 class TestCourseAPI: # 初始化 TOKEN = None # 前置处理 def setup(self): # 初始化接口类 self.login_api = LoginAPI() self.course_api = CourseAPI() # 登录成功 # 获取验证码 res_v = self.login_api.get_verify_code() # 登录 login_data = { "username": "admin", "password": "admin123", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) # 提取登录成功的token数据并保存 TestCourseAPI.TOKEN = res_l.json().get("token") print(TestCourseAPI.TOKEN) # 后置处理 def teardown(self): pass
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:创建课程查询成功
# 查询失败(用户未登录) def test02_select_fail(self): response = self.course_api.select_course(test_data="?subject=6", token="xxx") print(response.json())
步骤3:针对响应结果进行断言
# 断言响应状态码 assert 200 == response.status_code # 断言msg中包含指定的文字 assert "认证失败" in response.text # 断言json返回数据中code值 assert 401 == response.json().get("code")
断言依据:
3、课程修改单接口自动化测试
3.1 课程修改单接口文档信息
需求:
完成测试脚本的业务实现
针对响应结果进行断言
3.2 课程修改成功
课程修改成功测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI from api.course import CourseAPI # 创建测试类 class TestCourseAPI: # 初始化 TOKEN = None # 前置处理 def setup(self): # 初始化接口类 self.login_api = LoginAPI() self.course_api = CourseAPI() # 登录成功 # 获取验证码 res_v = self.login_api.get_verify_code() # 登录 login_data = { "username": "admin", "password": "admin123", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) # 提取登录成功的token数据并保存 TestCourseAPI.TOKEN = res_l.json().get("token") print(TestCourseAPI.TOKEN) # 后置处理 def teardown(self): pass
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:创建课程修改成功
# 课程修改成功 def test01_update_success(self): update_data = { "id": 109, "name": "接口测试001", "subject": "6", "price": 998, "applicablePerson": "2", "info": "课程介绍001" } response = self.course_api.update_course(test_data=update_data, token=TestCourseAPI.TOKEN) print(response.json())
步骤3:针对响应结果进行断言
# 断言响应状态码 assert 200 == response.status_code # 断言返回消息 assert "成功" in response.text # 断言code值 assert 200 == response.json().get("code")
断言依据:
3.3 课程修改失败(用户未登录)
课程修改失败(用户未登录)测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI from api.course import CourseAPI # 创建测试类 class TestCourseAPI: # 初始化 TOKEN = None # 前置处理 def setup(self): # 初始化接口类 self.login_api = LoginAPI() self.course_api = CourseAPI() # 登录成功 # 获取验证码 res_v = self.login_api.get_verify_code() # 登录 login_data = { "username": "admin", "password": "admin123", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) # 提取登录成功的token数据并保存 TestCourseAPI.TOKEN = res_l.json().get("token") print(TestCourseAPI.TOKEN) # 后置处理 def teardown(self): pass
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:创建课程修改成功
# 课程修改失败(未登录) def test02_update_fail(self): update_data = { "id": 109, "name": "接口测试001", "subject": "6", "price": 998, "applicablePerson": "2", "info": "课程介绍001" } response = self.course_api.update_course(test_data=update_data, token="xxx") print(response.json())
步骤3:针对响应结果进行断言
# 断言响应状态码 assert 200 == response.status_code # 断言返回消息 assert "认证失败" in response.text # 断言code值 assert 401 == response.json().get("code")
断言依据:
4、课程删除单接口自动化测试
4.1 课程删除单接口文档信息
需求:
完成测试脚本的业务实现
针对响应结果进行断言
4.2 课程删除成功
课程删除成功测试脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI from api.course import CourseAPI # 创建测试类 class TestCourseAPI: # 初始化 TOKEN = None # 前置处理 def setup(self): # 初始化接口类 self.login_api = LoginAPI() self.course_api = CourseAPI() # 登录成功 # 获取验证码 res_v = self.login_api.get_verify_code() # 登录 login_data = { "username": "admin", "password": "admin123", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) # 提取登录成功的token数据并保存 TestCourseAPI.TOKEN = res_l.json().get("token") print(TestCourseAPI.TOKEN) # 后置处理 def teardown(self): pass
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:课程删除成功
# 课程删除成功 def test01_delete_success(self): response = self.course_api.delete_course(course_id=110, token=TestCourseAPI.TOKEN) print(response.json())
步骤3:针对响应结果进行断言
# 断言响应状态码 assert 200 == response.status_code # 断言返回消息 assert "成功" in response.text # 断言code值 assert 200 == response.json().get("code")
断言依据:
4.3 课程删除失败(用户名为空)
课程删除失败(用户名为空)脚本层编写:
实现步骤:
步骤1:导包、创建测试类、前置,后置处理(和登录成功一样的)
# 导包 from api.login import LoginAPI from api.course import CourseAPI # 创建测试类 class TestCourseAPI: # 初始化 TOKEN = None # 前置处理 def setup(self): # 初始化接口类 self.login_api = LoginAPI() self.course_api = CourseAPI() # 登录成功 # 获取验证码 res_v = self.login_api.get_verify_code() # 登录 login_data = { "username": "admin", "password": "admin123", "code": "2", "uuid": res_v.json().get("uuid") } res_l = self.login_api.login(test_data=login_data) # 提取登录成功的token数据并保存 TestCourseAPI.TOKEN = res_l.json().get("token") print(TestCourseAPI.TOKEN) # 后置处理 def teardown(self): pass
前置处理是处理获取验证码的uuid信息,用于登录接口使用。
步骤2:课程删除失败(用户名为空)
# 课程删除失败(用户未登录) def test03_delete_fail(self): response = self.course_api.delete_course(course_id=110, token="xxx") print(response.json())
步骤3:针对响应结果进行断言
# 断言响应状态码 assert 200 == response.status_code # 断言返回消息 assert "认证失败" in response.text # 断言code值 assert 401 == response.json().get("code")
断言依据: