文章目录
- 前言
- 一、登录单接口自动化测试
- 1.1 登录单接口文档信息
- 1.2 登录成功
- 1.3 登录失败(用户名为空)
- 二、数据驱动的实现
- 2.1 json文件实现数据驱动
- 三、课程添加单接口自动化测试
- 3.1 课程添加单接口文档信息
- 3.2 课程添加成功
- 3.3 课程添加失败(未登录)
- 四、课程查询单接口自动化测试
- 4.1 课程查询单接口文档信息
- 4.2 课程查询成功
- 4.3 课程查询失败(用户未登录)
- 五、课程修改单接口自动化测试
- 5.1 课程修改单接口文档信息
- 5.2 课程修改成功
- 5.3 课程修改失败(用户未登录)
- 六、课程删除单接口自动化测试
- 6.1 课程删除单接口文档信息
- 6.2 课程删除成功
- 6.3 课程删除失败(用户名为空)
- 七、项目配置文件
- 八、Allure报告
- 总结
前言
一、登录单接口自动化测试
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:针对响应结果进行断言
# 断言响应状态码为200assert 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:针对响应结果进行断言
# 断言响应状态码为200assert 200 == response.status_code# 断言响应数据包含'错误'assert '错误' in response.text# 断言响应json数据中code值assert 500 == response.json().get("code")
断言依据:
二、数据驱动的实现
1.什么是数据驱动?维护焦点:测试数据数据驱动:以测试数据驱动脚本执行,维护焦点从脚本转向测试数据的一种自动化 测试设计模式。图示说明:维护测试数据:
2.如何实现数据驱动?
图示说明:
pytest中parametrize装饰器(1)作用:遍历所有测试数据并运行测试方法。(2) 语法:@pytest.mark.parametrize ( ②保存数据参数名, ①测试数据 )def test_method(self, ③参数名 )pass示例:test_data = [( "manager", "123456" ), ("", "123456"), ("itheima", "123456")]@pytest.mark.parametrize(" mobile, passwd ", test_data )def test_login(self, mobile, passwd )pass对应上面语法。
针对登录接口实现步骤:
需求:针对登录接口,将请求数据和断言数据组织成JSON文件,完成自动化测试。步骤1:准备测试数据# 测试数据①测试数据test_data = [("manager", "123456", 200, '成功', 200),("", "123456", 200, '错误', 500),("jack666", "123456", 200, '错误', 500),]
步骤2:所以pytest中parametrize装饰器
#登录单接口实现 @pytest.mark.parametrize(②保存数据参数名"username, password, status, message, code" ,①测试数据test_data)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)# 断言响应状态码为200assert status == response.status_code# 断言响应数据包含'成功'assert message in response.text# 断言响应json数据中code值assert code == response.json().get("code")
2.1 json文件实现数据驱动
json文件实现数据驱动实现步骤:
步骤1:创建data目录下面的login.json文件用于存储json数据
[{"username": "manager","password": "123456","status": 200,"message": "成功","code": 200},{"username": "","password": "123456","status": 200,"message": "错误","code": 500},{"username": "jack666","password": "123456","status": 200,"message": "错误","code": 500} ]
步骤2:导入json数据文件
# 导包 import json# 读取json文件 def build_data(json_file):
步骤3:读取json数据文件
# 读取json文件 def build_data(json_file):# 1.定义空列表test_data = []# 2.打开json文件with open(json_file, "r") as f:# 3.加载json文件数据json_data = json.load(f)# 4.循环遍历测试数据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# 登录成功# @pytest.mark.parametrize("username, password, status, message, code", build_data(json_file="../data/login.json"))
三、课程添加单接口自动化测试
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_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")
断言依据:
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_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")
断言依据:
四、课程查询单接口自动化测试
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_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")
断言依据:
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 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")
断言依据:
五、课程修改单接口自动化测试
5.1 课程修改单接口文档信息
需求:完成测试脚本的业务实现针对响应结果进行断言
5.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")
断言依据:
5.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")
断言依据:
六、课程删除单接口自动化测试
6.1 课程删除单接口文档信息
需求:完成测试脚本的业务实现针对响应结果进行断言
6.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")
断言依据:
6.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")
断言依据:
七、项目配置文件
测试环境 (kdtx-test.itheima.net) 测试通过后,我们的代 码能直接在生产环境(kdtx.itheima.net)上 运行吗?
apiTestFramework # 项目名称├── api # 定义封装被测系统的接口├── script # 定义测试用例脚本├── data # 存放测试数据文件├── report # 存放生成的测试报告├── common # 存放通用工具类├── config.py # 定义项目的配置信息└── pytest.ini # pytest配置文件
配置文件config.py的步骤:# 导包import os# 定义环境域名BASE_URL = "http://kdtx-test.itheima.net"# 统一文件路径BASE_PATH = os.path.dirname(__file__)print(BASE_PATH)
八、Allure报告
(1)Allure介绍
1.介绍• 能生成美观易读的报告• 支持多种开发语言,如java、python等• 能快速上手2.操作步骤① 生成测试结果文件(json文件)② 使用allure命令生成在线报告
步骤1:生成测试结果文件
安装:pip install allure-pytest使用步骤:1. 将pytest配置文件中的命令行参数加上如下代码--alluredir report2. 编写好测试脚本后,在命令行行中运行pytest[pytest]addopts = -s --alluredir reporttestpaths = ./scriptspython_files = test*.pypython_classes = Test*python_functions = test*3. 程序运行结束后,会在项目的report目录中生成一些json文件
步骤2:使用allure生成在线报告
安装:1. https://github.com/allure-framework/allure2/releases 下载 allure2. 解压缩安装包到一个 不包含中文路径 的目录3. 将压缩包内的 bin 目录配置到 path 系统环境变量4. 右键我的电脑 - 属性 - 高级设置 - 环境变量 - 找到系统环境变量的path项 - 增加 allure到bin目录5. 在命令行中输入 allure --version 命令,能显示allure版本信息,即为成功