apiTestFramework #项目名称
导包
定义类
创建URL(初始化方法
测试接口的方法
'''
被测试系统的接口封装
获取验证码http://localhost/index.php?m=Home&c=User&a=verify
登录http://localhost/index.php?m=Home&c=User&a=do_login
api目录下
'''
# 导包
# 定义类
class LoginApi:
def __init__(self):
# 设置URL
self.url_verify = "http://localhost/index.php?m=Home&c=User&a=verify"
self.url_login = "http://localhost/index.php?m=Home&c=User&a=do_login"
# 获取验证码
# 使用session 实例化session:不需要每一条单独设置cookies
def get_verify_code(self, session):
response = session.get(self.url_verify)
return response
# 登录
def login_shop(self, session, username, password, verify_code):
login_data = {
"username": username,
"password": password,
"verify_code": verify_code
}
response = session.post(self.url_login, data=login_data)
return response
api内模块命名规则:
class XxxApi / def xxx_xxx_xxx…()
script内模块命名规则:
class TestXxxxx(): / def test01_xxx_xxx…()
'''
定义接口测试用例
使用unittest
1.导包
2.创建测试类
2.1前置处理
2.2后置处理
2.3创建测试方法
script目录下
读取data内的文件信息
'''
import json
import unittest
import requests
from api.login import LoginApi
from parameterized import parameterized
# 导入包 parameterized
# 构造测试数据
def built_data():
test_data = []
file = "../data/login_data.json"
with open(file, "r", encoding="utf-8") as f:
# 把数据加入到json_data
json_data = json.load(f)
for case_data in json_data:
username = case_data.get("username")
password = case_data.get("password")
verify_code = case_data.get("verify_code")
content_type = case_data.get("content_type")
status_code = case_data.get("status_code")
status = case_data.get("status")
msg = case_data.get("msg")
test_data.append(username, password, verify_code, content_type, status_code, status, msg)
return test_data
class TestLogin(unittest.TestCase):
# 前置处理
def setUp(self):
self.login_api = LoginApi()
self.session = requests.session()
# 后置处理
def tearDown(self):
if self.session:
self.session.close()
@parameterized.expand(built_data())
# 创建测试用例
def test01_login(self,username, password, verify_code, content_type, status_code, status, msg):
# 调用验证码接口获取验证,并且进行断言
response = self.login_api.get_verify_code(self.session)
self.assertEqual(status, response.status_code)
self.assertIn(content_type, response.headers.get("Content-Type"))
# 调用登录接口,获取登录信息,并进行断言
response1 = self.login_api.login_shop(self.session, username ,password, verify_code)
self.assertEqual(status_code, response1.status_code)
self.assertEqual(status, response1.json().get("status"))
self.assertIn(msg, response1.json().get("msg"))
'''
导包
封装测试套件
指定测试报告路径
文件流的形式打开文件
创建HTMLTestRunner的运行器
执行测试套件
tun_suite.py 内
文件生成在report内
'''
import time
import unittest
from lib.HTMLTestRunner import HTMLTestRunner
from script.test01_login import TestLogin
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestLogin))
report = "report/report-{}.html".format(time.strftime("%Y%m%d"))
with open(report, "wb") as f:
runner = HTMLTestRunner(stream=f, title="开发框架的TPShop测试报告")
runner.run(suite)
app.py配置地址信息
# 当前文件的绝对路径os.path.abspath(__file__)
# 当前文件的目录os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
'''
使用App.BASE_DIR获取文件的绝对目录
'''
token/hearders 的信息存放(多个模块使用
获取数据库内测试数据https://gitee.com/yiyinyan/TPShopApi/blob/master/scripts/testLogin.py
可以放在util.py 内
def common_assert(case, response, status_code=200, success=True, code=10000, message="操作成功"):
case.assertEqual(status_code, response.status_code)
case.assertEqual(success, response.json().get("success"))
case.assertEqual(code, response.json().get("code"))
case.assertIn(message, response.json().get("message"))