栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

接口自动化

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

接口自动化

目录

一、接口自动化

1.框架结果

 接口测试框架的结构说明

3.封装TPShop登录接口案例

login

4.登陆测试用例

logintestcase

run_suite

运行成功

 生成报告

 二、参数化处理

1.构造参数化

logintestcase

run_suite

data.json

运行成功​

 生成报告

 三、db数据承载形式实现参数化

1.构造数据库数据

2.修改构造数据函数


一、接口自动化

1.框架结果

 接口测试框架的结构说明

        -- API用于封装被测的接口(用request模块封装的请求方法)

        -- TestCase 将一个或者多个接口封装成测试用例,并使用UnitTest管理测试用例 TestCase 可以调用数据库进行数据的校验

        -- 为了方便维护测试数据,可以把测试脚本和测试数据分离开

        -- 通过UnitTest断言接口返回的数据,并生成测试报告

2.框架目录结构

        apiTestframework 项目名称

        |--- api package:定义封装被测系统的接口 

        |--- script package:定义测试用例脚本 

        |--- data dir:存放测试数据

        |--- report dir:存放生成的测试报告

        |--- lib package:存放第三方文件

        |--- app.py 定义项目的配置信息

        |--- utils.py 定义工具类

        |--- run_suite.py 执行测试套件的入口

3.封装TPShop登录接口案例

        

        按照功能模块定义封装被测系统的接口,方便测试脚本的调用,并且能够到达代码的复用。对登录功能的相关接口进行封装,示例代码:

login
class LoginApi(object):
    # 初始化
    def __init__(self):
        self.verify_code_url = "xxx"
        self.login_url = "yyyy"

    # 登录过程
        # 1.获取验证码
        # 2.填写必要数据:用户名,密码,验证码
        # 3.点击登录按钮
    def get_login_verify_code(self, session):
        return session.get(self.verify_code_url)

    def login(self, session, username, password, verify_code):
        data = {
            "useername": username,
            "password": password,
            "verify_code": verify_code
        }
        return session.post(url = self.login_url, data=data)

4.登陆测试用例

将api模块中的一个或多个接口封装成一个测试用例,并使用测试框架UnitTest管理测试用例。定义登录功能的测试用例,示例代码:

logintestcase
import unittest
from requests import Session
from api.login import LoginApi

class LoginTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        cls.login_api = LoginApi()

    def setUp(self) -> None:
        self.session = Session()

    def tearDown(self) -> None:
        self.session.close()

    def test_login_success(self):
        # 请求验证码
        response = self.login_api.get_login_verify_code(self.session)
        self.assertIn("image", response.headers.get("Content-Type"))
        # 验证码识别
        # 调用登陆方法,发送请求,获取相应数据
        res = self.login_api.login(self.session, "13800000002", "123456", "8888")
        # 断言
        self.assertEqual(200, res.status_code)
        self.assertEqual(1, res.get("status"))
        self.assertEqual("登录成功", res.get("msg"))

run_suite
import unittest
from scripts import logintestcase
from HTMLTestRunner import HTMLTestRunner

suite = unittest.TestSuite()
suite.addTest(logintestcase.LoginTest("test_login_success"))
f = open("./report/report.html", 'wb')
runner = HTMLTestRunner(stream = f, title="lsjflsjfls", description="ksjfljsfjdsf")
runner.run(suite)

运行成功

 生成报告

 二、参数化处理

1.构造参数化 logintestcase
import json
import unittest
from requests import Session
from parameterized import parameterized
from api.login import LoginApi


def build_data():
    with open('./data/data.json', 'r', encoding='utf-8') as f:
        content = f.read()
    data = json.loads(content)
    d = []
    for i in data:
        d.append((i['username'], i['password'], i['verify_code'], i['status'], i['msg']))
    return d


class LoginTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        cls.login_api = LoginApi()

    def setUp(self) -> None:
        self.session = Session()

    def tearDown(self) -> None:
        self.session.close()

    @parameterized.expand(build_data)
    def test_login_success(self, username, password, verify_code, status, msg):
        # 请求验证码
        response = self.login_api.get_login_verify_code(self.session)
        self.assertIn("image", response.headers.get("Content-Type"))
        # 验证码识别
        # 调用登陆方法,发送请求,获取相应数据
        res = self.login_api.login(self.session, username, password, verify_code)
        # 断言
        self.assertEqual(200, res.status_code)
        self.assertEqual(status, res.get("status"))
        self.assertEqual(msg, res.get("msg"))
run_suite
import unittest
from scripts import logintestcase
from HTMLTestRunner import HTMLTestRunner

suite = unittest.TestSuite()
suite.addTest(logintestcase.LoginTest("test_login_success"))
f = open("./report/report.html", 'wb')
runner = HTMLTestRunner(stream = f, title="lsjflsjfls", description="ksjfljsfjdsf")
runner.run(suite)

data.json
[
  {
    "username": "13800000002",
    "password": "123456",
    "verify_code": "8888",
    "status": 1,
    "msg": "登录成功"
  },
  {
    "username": "138123456789",
    "password": "123456",
    "verify_code": "8888",
    "status": 0,
    "msg": "账号或者密码错误"
  },
  {
    "username": "",
    "password": "123456",
    "verify_code": "8888",
    "status": 0,
    "msg": "账号或者密码错误"
  },
  {
    "username": "13800000002",
    "password": "",
    "verify_code": "8888",
    "status": 0,
    "msg": "账号或者密码错误"
  }
]

运行成功  生成报告

 三、db数据承载形式实现参数化

1.构造数据库数据

        执行SQL脚本,将数据写入数据库中

2.修改构造数据函数
def build_data():
    # 获取数据库的数据
    sql = "select * from t_login"
    db_data = DBUtil.exe_sql(sql)
    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 = case_data[6]
        status = case_data[7]
        msg = case_data[8]
        test_data.append((username, password, verify_code, status_code, content, status, msg))
        print(test_data)
    return test_data

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317038.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号