测试笔记

安全测试-主要针对的是sql注入

sql注入:允许攻击者将恶意SQL代码插入到应用程序的输入参数中,这些参数随后被传递给‌数据库服务器执行。

SQL注入攻击的总体思路

  • 寻找到SQL注入的位置
  • 判断服务器类型和后台数据库类型
  • 针对不同的服务器和数据库特点进行SQL注入攻击

通用用例编写

正逆向:主要考虑以下方面

  1. 为空(逆向)
  2. 类型
  3. 长度
  4. 规则
    • 可选项
    • 存在与否
    • 已登录?
  • 正向用例:选最多那一个,尽可能覆盖
  • 逆向用例:全部加起来

接口测试

一、接口测试用例

接口测试正向:

  1. 必填参数
  2. 全部参数

接口测试逆向,主要考虑必填参数以下方面(同功能测试):

  1. 为空
  2. 类型
  3. 长度
  4. 规则

测试用例预期结果内容:

  1. 响应状态码
  2. 响应数据

postman代码与断言:

  1. 将响应数据(json格式)的某些数据保存到环境变量:
1
2
3
4
5
//保存json数据
const jsonData = pm.response.json()

//将json数据的key为uuid的值保存到环境变量
pm.environment.set("uuid2",jsonData.uuid)
  1. 响应状态码断言:
1
2
3
4
5
6
7
8
9
10
//判断响应状态码是否等于200
pm.test("status code is 200", () => {
pm.response.to.have.status(200);
});

pm.test()函数:
参数1:字符串-测试断言名称
参数2:回调函数一具体断言语句

pm.response.to.have.statuscode:Number):判断是否包含指定的状态码
  1. 包含指定字符串断言:
1
2
3
4
5
6
7
8
9
10
//判断响应结果是否包含指定字符串
pm.test("Body matches string",() => {
pm.expect(pm.response.text()).to.include("string_you_want_to_search") ;
);

//通过一系列调用链判断是否符合预期
pm.expect():接收实际结果
.to:连接符,用于连接断言与判断
.include():用于指定断言方式和预期结果
pm.presponse.text():获取响应结果的文本格式数据
  1. JSON数据断言
1
2
3
4
5
6
7
8
//校验响应的JSON数据
pm.test("Your test name", () => {
const jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});

pm.response.json()获取响应结果的json数据
.eq1():用于指定断言方式和预期结果

.to:连接符,用于连接断言与判断

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//针对状态码
pm.test("响应状态码为200",()=>{
pm.response.to.have.status(200)
})

//针对文本
pm.test("响应数据包含成功",()=>{
pm.expect(pm.response.text()).to.include("成功")
})

//针对json的某个key是否等于某个值
pm.test("msg为操作成功",()=>{
pm.expect(pm.response.json().msg).to.eql('操作成功')
})

文档参数化

请求数据+预期结果放到json文件参数化

将测试数据放到json文件,只需一个请求就可以使用多个测试数据。

  1. 请求数据参数化,请求体数据参数化直接读取json文件,{{key}}

  2. 预期结果参数化,断言数据参数化直接读取json文件,data.key

pytest自动化接口测试

文件命名:

  1. 文件以test开头或结尾
  2. 类名,函数名以test开头或结尾

项目结构

allure使用步骤:

  1. 将pytest配置文件中的命令行参数加上如下下代码
1
--alluredir report
  1. 编写好测试脚本后,在命令行行中运行pytest

pytest.ini

1
2
3
4
5
6
[pytest]
addopts = -s --alluredir report # 运行模式 allure 目录
testpaths = ./scripts # 脚本目录
python_files = test*.py # 需要运行的文件test开头
python_classes = Test* # 文件内的测试类
python_functions = test* # 文件内的测试方法
  1. 程序运行结束后,会在项目的report目录中生成一些json文件
  2. 使用allure生成在线报告
1
2
3
4
5
6
安装:
1. https://github.com/allure-framework/allure2/releases 下载 allure
2.解压缩安装包到一个不包含中文路径的目录
3.将压缩包内的 bin 目录配置到 path 系统环境变量
4.右键我的电脑-属性-高级设置-环境变量-找到系统环境变量的path项-增加 allure到bin目录
5.在命令行中输入 allure--version 命令,能显示allure版本信息,即为成功
  1. 运行项目生成测试文件(json)

pytest

  1. 生成报告

    allure serve report

配置文件config.py

1
2
3
4
5
6
7
8
9
10
# 存放被测试项目基本信息,如baseURL地址等

# 操作系统库
import os

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

# 获取项目根路径
BASE_PATH = os.path.dirname(__file__)

pytest数据驱动

概念:以测试数据驱动脚本执行,维护焦点从脚本转向测试数据文件

好处:提高代码可维护性。脚本只需要介绍请求体数据即可,脚本不会有什么变化,只有测试数据会有变化

pytest中parametrize装饰器

作用:遍历所有测试数据并运行测试方法。

语法:

1
2
3
4
5
6
7
@pytest.mark.parametrize(②保存数据参数名,①测试数据)
def test_method(self, ③参数名)
pass

测试数据:格式列表嵌套元组
保存数据参数名:参数个数必须与数据个数相等
参数名:直接复制②即可

示例:

1
2
3
4
5
6
7
8
9
10
11
# 测试数据
test_data = [
# 用户名 密码 响应码 msg code
("admin", "HM_2023_test", 200, '成功', 200),
("", "HM_2023_test", 200, '错误', 500),
("coffeelin", "HM_2023_test", 200, '错误', 500)
]

@pytest.mark.parametrize("username,password,status,message,code",test_data)
def test_login(self,username,password,status,message,code):
pass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 前提:准备测试数据的json文件

# 读取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)
# 遍历json_data,并添加到test_data
for case_data in json_data:
# 转换数据格式[{key:val},{key:val}]==>[(val),(val)]
username = case_data.get("username")
passwoed = case_data.get("passwoed")
status = case_data.get("status")
message = case_data.get("message")
code = case_data.get("code")
test_data.append((username,passwoed,status,message,code))
# 返回处理后数据
return test_data

@pytest.mark.parametrize("username,password,status,message,code",build_data(json_file="../data/login.json"))
def test_login(self,username,password,status,message,code):
pass
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2022-2024 CoffeeLin
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信