B站首推!2023最详细自动化测试合集,小白皆可掌握,让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db
目录
一、前言
二、设计模式
2.1 数据驱动测试模式
2.2 Page Object 模式
2.3 单例模式
三、代码实现
四、总结
一、前言
在软件开发过程中,测试是一个非常必要的环节。而随着互联网技术的不断发展,Web API 的应用越来越广泛,对 Web API 接口进行测试也就成为了重要的一环。因此,如何优秀地进行接口自动化测试就显得尤为重要。
本文将从接口自动化测试的角度出发,介绍一些设计模式,以及如何通过这些设计模式来提高接口自动化测试的效率和可维护性。
二、设计模式
2.1 数据驱动测试模式
数据驱动测试模式是指使用外部数据源(如 Excel 文件、数据库等)来驱动测试用例的执行。采用数据驱动测试模式,可以大大减少测试用例的编写量,并且使测试用例更加易于维护。下面是一个示例:
# testdata.xlsx
| CaseName | Url | Method | Headers | Body |
|----------|-----------------------|--------|---------|------|
| login | https://example.com/login | POST | token=xxx|{"username":"test","passwor":"123456"}|
# test.py
import openpyxl
import requests
def run_testcase(case_name, url, method, headers, body):
response = requests.request(method, url, headers=headers, json=body)
assert response.status_code == 200
if __name__ == '__main__':
wb = openpyxl.load_workbook('testdata.xlsx')
sheet = wb.active
for row in sheet.iter_rows(min_row=2):
data = [cell.value for cell in row]
run_testcase(*data)
2.2 Page Object 模式
Page Object 模式是指将页面的元素抽象封装为一个类,用来描述该页面及其操作。在接口自动化测试中,我们可以将接口请求和响应的相关参数抽象为一个类,以便于代码的复用和维护。下面是一个示例:
class LoginApi:
def __init__(self, url, headers):
self.url = url
self.headers = headers
def login(self, username, password):
body = {
"username": username,
"password": password
}
response = requests.post(self.url, headers=self.headers, json=body)
return response.json()
2.3 单例模式
单例模式是指保证一个类只有一个实例,并提供一个全局访问点。在接口自动化测试中,我们经常需要用到共享资源(如数据库连接池、配置信息等),这时候单例模式就非常有用了。下面是一个示例:
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
class Database(Singleton):
connection_pool = []
def __init__(self, db_url):
self.db_url = db_url
self.connect()
def connect(self):
connection = create_connection(self.db_url)
self.connection_pool.append(connection)
三、代码实现
下面是一个完整的接口自动化测试框架示例,其中包含了上述三种设计模式的应用。
config.py 文件用于存放配置信息:
class Config:
db_url = 'mysql://user:password@localhost/testdb'
api_host = 'https://example.com/api'
api_headers = {'Authorization': 'Bearer xxx'}
database.py 文件实现了单例模式,用于连接数据库并保证只有一个实例:
import mysql.connector
from singleton import Singleton
class Database(Singleton):
connection_pool = []
def __init__(self, db_url):
self.db_url = db_url
self.connect()
def connect(self):
connection = mysql.connector.connect(url=self.db_url)
self.connection_pool.append(connection)
api.py 文件实现了 Page Object 模式,定义了 LoginApi 类来处理登录接口请求和响应:
import requests
from page_object import PageObject
class LoginApi(PageObject):
def __init__(self, url=None, headers=None):
super().__init__(url=url, headers=headers)
def login(self, username, password):
body = {
"username": username,
"password": password
}
response = requests.post(self.url + '/login', headers=self.headers, json=body)
return response.json()
testcase.py 文件中实现了数据驱动测试模式,从外部数据源(如 Excel 文件)读取测试数据,并使用 unittest 框架编写测试用例:
import unittest
import openpyxl
from config import Config
from api import LoginApi
from database import Database
class TestLogin(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.api = LoginApi(url=Config.api_host, headers=Config.api_headers)
cls.db = Database(db_url=Config.db_url)
def test_login_success(self):
# 从数据源中读取测试数据
wb = openpyxl.load_workbook('testdata.xlsx')
sheet = wb['login']
data = [cell.value for cell in sheet[2]]
username, password = data[1], data[2]
# 调用接口进行登录
response = self.api.login(username, password)
user_id = response['user_id']
# 验证数据库中是否存在该用户
cursor = self.db.connection_pool[0].cursor()
query = f"SELECT * FROM users WHERE id='{user_id}'"
cursor.execute(query)
result = cursor.fetchone()
self.assertIsNotNone(result)
if __name__ == '__main__':
unittest.main()
以上是一个简单的接口自动化测试框架示例,其中包含了数据驱动测试模式、Page Object 模式和单例模式的应用。这些设计模式能够提高接口自动化测试的效率和可维护性,使我们能够更加轻松地进行接口自动化测试。
四、总结
本文介绍了接口自动化测试中常用的三种设计模式:数据驱动测试模式、Page Object 模式和单例模式,并通过具体的代码示例展示了如何应用这些设计模式来提高接口自动化测试的效率和可维护性。这些设计模式不仅可以减少测试用例编写量,还能使测试用例更加易于维护,并且能够优化共享资源(如数据库连接池、配置信息等)的使用方式。希望本文对您在接口自动化测试方面有所启发。
自动化测试学习步骤结构图:
自动化测试福利: