欢迎来到赛兔子家园

自动化参数化方法

Parameterized参数化库

Parameterized是Python的一个参数化库,同时支持unittest、pytest单元测试框架。

安装:pip install  parameterized

应用场景

使用在web的ui自动化测试、接口自动化测试中,对测试数据进行参数化。

需求:百度搜索关键字参数化处理

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: 青城子
# datetime: 2022/2/9 22:51 
# ide: PyCharm

import unittest

import time

from selenium import webdriver

from parameterized import parameterized


class TestBaiDu(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.implicitly_wait(5)
        cls.driver.maximize_window()
        cls.base_url = "https://www.baidu.com"

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def key_search(self, key):
        self.driver.get(self.base_url)
        self.driver.find_element_by_xpath('//*[@id="kw"]').send_keys(key)
        self.driver.find_element_by_xpath('//*[@id="su"]').click()
        time.sleep(2)

    @parameterized.expand([
        ("selenium",),
        ("python",), ]
    )
    def test_key_search(self, key):
        print(key)
        self.key_search(key)


if __name__ == '__main__':
    unittest.main()
 数据驱动(ddt)

利用测试数据来驱动测试用例的执行;DDT可以实现用例的重复执行以及代码的重复使用,减少工作量。

数据代码分离为主流设计思路,在常见的测试体系中可以使用excel、json文件来管理测试数据;通过代码自动读取,来驱动用例的执行,ddt测试框架基于这种设计思路上,实现了方便、简单易懂的效果。

安装:pip insatll ddt

实例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: 青城子
# datetime: 2022/2/9 23:10 
# ide: PyCharm

import unittest

import requests
import ddt

from BSTestRunnerdChinese import BSTestRunner

data_list = [

    {"url": "https://cnodejs.org/api/v1/topics", "method": "get"},
    {"url": "https://cnodejs.org/api/v1/topic/5433d5e4e737cbe96dcef312", "method": "get"},
    {"url": "https://cnodejs.org/api/v1/topic_collect/collect", "method": "post"},
    {"url": "https://cnodejs.org/api/v1/topic_collect/de_collect", "method": "post"},
    {"url": "https://cnodejs.org/api/v1/user/alsotang", "method": "get"},
    {"url": "https://cnodejs.org/api/v1/message/mark_all", "method": "post"},

]


@ddt.ddt
class MyCase(unittest.TestCase):
    @ddt.data(*data_list)
    def test_case(self, item):
        response = requests.request(
            url=item['url'],
            method=item['method']
        )
        self.assertEqual(response.status_code, 200)


if __name__ == '__main__':
    suite = unittest.makeSuite(testCaseClass=MyCase, prefix="test")
    filename = "a.html"
    with open(filename, "wb") as f:
        BSTestRunner(
            stream=f,
            title="BSTestRunner示例报告",
            description="演示ddt和BSTestRunner综合用法",
            verbosity=2,  # 更详细和直观打印用例名称和执行结果
        ).run(suite)

posted on 2022-02-09 23:19  赛兔子  阅读(301)  评论(0编辑  收藏  举报

导航