接口测试

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. 测试报告