接口测试
1. pymysql
1. 操作流程
1. 创建连接
2. 获取游标
3. 执行操作
1. 查询操作(select)
2. 非查询操作(insert/uplate/delete)
1. 事务提交(连接对象.commit())
2. 事务回滚(连接对象.rollback())
4. 关闭游标
5. 关闭连接
# 导包 import pymysql # 创建连接 conn = pymysql.connect(host="localhost", port=3306, user="root", password="root", database="books") # 创建游标 cursor = conn.cursor() # 执行sql cursor.execute("select.version()") result = cursor.fetchall() print(result) # 关闭游标 cursor.close() # 关闭连接 conn.close()
# 例: 查询总记录个数和所有数据 # 导包 import pymysql # 创建连接 conn = pymysql.connect(host='localhost', port=3306, user='root', password='111111', database='students') # 创建游标 cursor = conn.cursor() # sql语句 sql = "select * from employee" cursor.execute(sql) print(cursor.rowcount) print(cursor.fetchall()) # 关闭游标 cursor.close() # 关闭连接 conn.close()
2. 事务
并发控制的基本单位, 一个操作序列, 要么都执行, 要么都不执行, 一个不可分割的单位
事务的特征(ACID)
- 原子性: 事务中操作被看成一个逻辑单元, 操作要么全部成功, 要么全部失败
- 一致性: 结果保留不变, 运行不改变事务一致性
- 隔离型: 中间状态其他事务不可见
- 持久性: 一旦提交事务成功, 对数据改变就是永久的
事务操作方法
- conn.autocommit(False): 设置是否开启自动提交服务, 默认不开启
- conn.commit(): 提交数据库事务
- conn.rollback(): 回滚事务
try: # 创建连接 # 创建游标 # 执行sql # 提交事务 expect Expection as e: # 回滚数据 # 打印异常信息 finally: # 关闭游标 # 关闭连接
3. pymysql封装
# 导包 import pymysql # 创建工具类 class DBUntil:
# 初始化
__conn = None
__cursor = None
# 创建连接 @classmethod def __get_conn(cls): if cls.__conn is None:
cls.__conn = pymysql,connect("...")
return cls.__conn
# 获取游标 @ classmethod def __get_cursor(cls): pass # 执行sql @classmethod def exe_sql(cls, sql): try: pass expect Expection as e: pass finally: pass # 关闭游标 @classmethod def __close_cursor(cls): pass # 关闭连接 @classmethod def __close_conn(cls): pass
2. requests
1. 获取get请求
# 导入requests import requests # 获取get请求 request.get() # 获取请求内容 print(request.text)
1. 响应内容
1. 请求方法的返回值response为Response对象, 我们可以从这个对象中获取所有我们想要的响应
response.status_code # 状态码 response.url # 请求url response.encoding # 查看响应头部字符编码 response.headers # 头信息 response.cookies # cookie信息 response.text # 文本形式的响应内容 response.content # 字节形式的响应内容 response.json() #JSON形式的响应内容
2. 请求头获取
headers = {"area": "010"} response = requests.get(url, headers=headers)
3. 集成UnitTest
将接口测试脚本集成到Unittest单元测试框架中, 利用Unittest的功能来运行接口测试用例
1. 使用unittest框架的目的
1. 方便管理和维护多个测试用例
2. 提供丰富的断言方法
3. 能够生成测试报告
2. 实现
# 导包 # 创建测试类 # 创建测试方法 # fixture # setup # teardown # 测试用例 # 关闭session对象
# 例: # 创建测试类 class TPShopLogin(unittest.TestCase): # setup def setUp(self): # 实例化session对象 self.session = requests.Session() # 定义验证接口url地址 self.url_verify = "url地址" # 定义登录接口url地址 self.url_login = "url地址" # teardown def tearDown(self): # 关闭session对象 self.session.close() # 登录成功 def test01_sucess(self): # 发送验证码请求并断言 response = self.session.get(url=self.url_verify) self.assertEqual(200, response.status_code) self.assertIn("image", response.headers.get("Content-Type")) # 发登录请求并断言 login_data = { "username": "11111111111", "password": "123456", "verify_code": "8888" } response = self.session.post(url=self.url_login, data=login_data) print(response.json()) self.assertEqual(200, response.status_code) self.assertEqual(1, response.json().get("status")) self.assertIn("登录成功", response.json().get("msg"))
4. 测试报告