IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> python实战:接口测试 -> 正文阅读

[开发测试]python实战:接口测试

接口测试框架

能够按照接口测试框架的封装思想,实现 TPshop 登录接口的接口对象封装
能够按照接口测试框架的封装思想,使用 UnitTest 编写测试用例实现接口的测试
能够实现接口测试框架项目目录结构的定义
能够提取测试脚本中的测试数据,实现测试数据参数化
能够使用 HTMLTestRunner 生成接口测试报告

一、接口测试框架开发

1 框架结构

?

重点说明:
(1 )核心在于将测试用例与被测试系统 API 进行分离,便于后期维护
(2 )测试用例是通过 unittest 进行管理,并提供了丰富的断言(等于、包含等)
(3 )可以通过参数化思想测试数据与测试脚本的分离
(4 )可以调用数据库进行结果验证或将数据库作为参数化的数据源
(5 )借助第三方工具快速的生成 HTML 报告

2 框架目录结构

  1. data -- 管理测试数据的文件夹
  2. report -- 管理测试结果报告的文件夹
  3. api -- 封装被测试系统的接口
  4. scripts -- 测试用例脚本
  5. tools -- 第三方工具包管理app.py -- 配置信息文件
  6. run_suite.py -- 测试用例执行入口
  7. utils.py -- 自定义工具类

3 封装被测试系统接口

# 封装被测试系统接口 
# 定义接口类 
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)

4 定义接口测试用例

# 导包 
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.session.get(url=self.url_verify)
        self.assertEqual(200, response.status_code)
        self.assertIn("image", response.headers.get("Content-Type"))
 
        # 发登录请求并断言
        login_data = {
            "username": "13488888888",
            "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"))
 
    # 账号不存在
    def test02_user_isnot_exist(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": "13488888899",
            "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"))
 
 
    # 密码错误
    def test03_password_exist(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": "13488888888",
            "password": "error",
            "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(-2, response.json().get("status"))
        self.assertIn("密码错误", response.json().get("msg"))

5 集成测试报告

# 导包 
import time 
import unittest from scripts.test01_login 
import TestLoginAPI from tools.HTMLTestRunner 
import HTMLTestRunner
# 封装测试套件 
suite = unittest.TestSuite() 
suite.addTest(unittest.makeSuite(TestLoginAPI)) 
# 指定报告路径 
report = "./report/report-{}.html".format(time.strftime("%Y%m%d-%H%M%S")) 
# 打开文件流 
with open(report, "wb") as f: 
   # 创建HTMLTestRunner执行器 
   runner = HTMLTestRunner(f, title="接口测试报告")
   # 执行测试套件 
   runner.run(suite)

6 测试数据参数化

6.1 基于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"))

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:26:12  更:2022-05-07 11:26:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:25:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码