一、接口测试响应验证
如何在测试过程中验证接口没有 Bug?
- 通过接口响应值
- 通过查询数据库信息辅助验证
二、接口测试数据清理
自动化测试中会产生大量的脏数据,该如何清理?
- 通过调用delete接口删除
- 自动化测试使用干净的测试环境,每次自动化测试完成后,还原数据。
三、数据库操作注意事项
- 直接对数据库操作是非常危险的行为
- 权限管理严格的公司对数据库权限给的很低
- 表结构复杂,随便删除数据会影响功能异常,甚至会出现系统异常。
四、接口自动化测试常用的数据库操作
- 连接与配置
- 查询数据与断言
4.1、数据库封装(Python)
- 封装数据库配置
- 封装 sql 查询操作
- 调用方法执行 sql 语句
class Mysql:
@classmethod
def connect(cls):
mysql_info = {
"host": "litemall.hogwarts.ceshiren.com",
"port": 13306,
"user": "test",
"password": "test123456",
"database": "litemall",
"charset": "utf8mb4"
}
conn = pymysql.Connect(**mysql_info)
return conn
@classmethod
def execute(cls, sql):
cnn = cls.connect()
sor = cnn.cursor()
sor.execute(sql)
res = sor.fetchall()
sor.close()
cnn.close()
return res
4.2、数据库断言
def test_cart_add(self, good_sn='CC102101'):
"""测试添加购物车功能"""
with allure.step("获取商品的id"):
ids = self.good.id(good_sn)
with allure.step("获取商品的good_id和product_id"):
good_id = ids[0]
product_id = ids[1]
sql = f"""
SELECT number FROM litemall_cart where goods_sn='{good_sn}' and goods_id='{good_id}'
"""
good_num1 = Mysql.execute(sql)[0][0]
print(good_num1)
with allure.step("添加商品到购物车"):
print(self.cart.add(good_id, product_id))
good_num2 = Mysql.execute(sql)[0][0]
print(good_num2)
assert good_num2 - good_num1 == 1