unitest参数化

# 封装被测试系统接口 
# 定义接口类 
class LoginAPI: 
# 初始化 
def __init__(self): 
    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"
 # 获取验证码接口 
def get_verify_code(self, session): 
    return session.get(self.url_verify) 
# 登录接口 
def login(self, session, username, password, verify_code): 
    login_data = { 
    "username": username, 
    "password": password, 
    "verify_code": verify_code 
}
    return session.post(url=self.url_login, data=login_data)
定义接口测试用例
# 导包 
import requests 
import unittest 
from api.login import LoginAPI 
# 定义测试类 
class TestLoginAPI(unittest.TestCase): 
# 前置处理 
    def setUp(self): 
        self.login_api = LoginAPI() 
        self.session = requests.Session() 
# 后置处理 
    def tearDown(self): 
        if self.session: 
        self.session.close() 
# 定义测试方法
 # 登录成功

    def test01_login_success(self): 
# 调用验证码接口 
        response = self.login_api.get_verify_code(self.session) 
# 断言 
        self.assertEqual(200, response.status_code) 
        self.assertIn("image", response.headers.get("Content-Type")) 
# 调用登录接口 
        response = self.login_api.login(self.session, "13488888888", "123456", "8888")                 

        print(response.json()) 
        self.assertEqual(200, response.status_code) 
        self.assertEqual(1, response.json().get("status")) 
        self.assertIn("登陆成功", response.json().get("msg")) 
# 账号不正确 
    def test02_user_isnot_exist(self): 
# 调用验证码接口 
        response = self.login_api.get_verify_code(self.session) 
# 断言 
        self.assertEqual(200, response.status_code) 
        self.assertIn("image", response.headers.get("Content-Type")) 
# 调用登录接口 
        response = self.login_api.login(self.session, "13488888899", "123456", "8888")             

        print(response.json()) 
        self.assertEqual(200, response.status_code) 
        self.assertEqual(-1, response.json().get("status")) 
        self.assertIn("账号不存在", response.json().get("msg")) 
        # 密码错误 
    def test03_password_exist(self): 
# 调用验证码接口 
        response = self.login_api.get_verify_code(self.session) 
# 断言 
        self.assertEqual(200, response.status_code) 
        self.assertIn("image", response.headers.get("Content-Type")) 
    # 调用登录接口 
        response = self.login_api.login(self.session, "13488888888", "error", "8888")         

        print(response.json()) 
        self.assertEqual(200, response.status_code) 
        self.assertEqual(-2, response.json().get("status")) 
        self.assertIn("密码错误", response.json().get("msg"))
基于 json 文件实现参数化
# 导包 
import json 
import requests 
import unittest 
from api.login import LoginAPI 
from parameterized import parameterized
# 构造测试数据 
def build_data(): 
    json_file = "../data/login.json" 
    test_data = [] with open(json_file, encoding="utf-8") as f: 
    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") 
        status_code = case_data.get("status_code") 
        content_type = case_data.get("content_type") 
        status = case_data.get("status") 
        msg = case_data.get("msg") 
        test_data.append((username, password, verify_code, status_code, content_type, status, msg)) 
        print("test_data = {}".format((username, password, verify_code, status_code, content_type, status, msg))) 
    return test_data

# 定义测试类 
class TestLoginAPI(unittest.TestCase): 
# 前置处理 
    def setUp(self): 
        self.login_api = LoginAPI() 
        self.session = requests.Session()
# 后置处理 
    def tearDown(self): 
        if self.session: 
            self.session.close() 
# 定义测试方法 
    @parameterized.expand(build_data) 
    def test01_login(self, username, password, verify_code, status_code, content_type, status, msg): 
# 调用验证码接口 
        response = self.login_api.get_verify_code(self.session) 
# 断言 
        self.assertEqual(status_code, response.status_code) 
        self.assertIn(content_type, response.headers.get("Content-Type")) 
# 调用登录接口 
        response = self.login_api.login(self.session, username, password, verify_code)     
        print(response.json()) 
        self.assertEqual(status_code, response.status_code)
        self.assertEqual(status, response.json().get("status")) self.assertIn(msg,   response.json().get("msg"))
基于数据库实现参数化
# 导包 
import requests 
import unittest from api.login 
import LoginAPI from tools.dbutil 
import DBUtil 
from parameterized import parameterized 
# 构造测试数据 
def build_data(): 
    sql = "select * from t_login" 
    db_data = DBUtil.exe_sql(sql) 
    print(db_data) 
    test_data = [] 
    for case_data in db_data: 
        username = case_data[2] 
        password = case_data[3] 
        verify_code = case_data[4] 
        status_code = case_data[5] 
        content_type = case_data[6] 
        status = case_data[7] 
        msg = case_data[8] 
        test_data.append((username, password, verify_code, status_code, content_type, status, msg)) 
        print("test_data = {}".format((username, password, verify_code, status_code, content_type, status, msg)))

return test_data

# 定义测试类 
class TestLoginAPI(unittest.TestCase): 
# 前置处理 
    def setUp(self): 
        self.login_api = LoginAPI() 
        self.session = requests.Session() 
  # 后置处理 
    def tearDown(self): 
        if self.session: 
            self.session.close() 
# 定义测试方法 
    @parameterized.expand(build_data) 
    def test01_login(self, username, password, verify_code, status_code, content_type, status, msg): 
# 调用验证码接口 
        response = self.login_api.get_verify_code(self.session) 
# 断言 
        self.assertEqual(status_code, response.status_code) 
        self.assertIn(content_type, response.headers.get("Content-Type")) 
   # 调用登录接口 
        response = self.login_api.login(self.session, username, password, verify_code)     
        print(response.json()) 
        self.assertEqual(status_code, response.status_code)         
        self.assertEqual(status, response.json().get("status")) 
        self.assertIn(msg, response.json().get("msg"))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值