zoukankan      html  css  js  c++  java
  • 接口自动化测试(三)

    一. 定义公共的请求方法

    如下图所示,同一个模块,只是请求数据和返回数据不同,http请求的发送过程是完全相同的

    对于不同模块,只是请求的url、请求方法、请求数据和返回数据不同,http请求的过程也是完全相同的

    这样就可以将发送请求的方法写成一个类或函数,供不同的测试用例调用

    具体的实现是

    import requests
    
    class MyRequests:
    
        def send_request(self, method, url, **kwargs):
            res = requests.request(method, url, **kwargs).text
            return res

    二. 利用excel存储测试数据,实现测试数据和测试脚本的分离

    利用excel存储测试数据的好处是,可以实现测试数据和测试脚本的分离,以后一旦数据有变动(添加删除、修改测试数据),不需要修改代码,只在excel中修改就好了

    那么,测试数据和脚本是怎么联系在一起的?

    可以定义一个读取excel的类,这个类读取到的数据返回给测试用例,测试用例再调用每一条测试数据去发送请求,进行比对。但有一个问题,按照以往的做法,一个test_send_request函数里利用for循环遍历每条测试数据,得到的结果始终是一个测试用例,我们希望每一条测试数据都是一个测试用例,就需要用到ddt

    三. ddt

    1. 什么是ddt

    ddt(data driven tests):数据驱动测试,由外部数据集合来驱动测试用例

    核心的思想:数据和测试代码分离

    2. 应用场景

    一组数据来执行相同的操作

    当测试数据发生大量变化的情况下测试代码(或者说测试用例)可以保持不变

    3. ddt的安装

    pip install ddt

    4. ddt的用法

    使用之前先导入ddt:

    import ddt

    ddt结合单元测试来使用

    1). 在测试类定义之前使用:@ddt

    2). 在测试用例定义之前使用:@ddt.data(测试数据),测试数据之间用逗号隔开

    3). 在2的基础上定义测试用例时,参数接收2中的测试数据

    例:

    @ddt.ddt

    class DemoTest(unittest.TestCase):

      @ddt.data(2,3,4)

      def test_print(self, a):

        print("简单调用@data查看输出的值是什么?", a)

    一组数据之间用逗号隔开

    data的参数可以为如下几种:

    1) 一组数据中,每个数据为单个值

    2) 一组数据中,每个数据为一个列表或者一个字典

    3) 文件对象:json、yaml

    一组数据中的数据为列表或者字典:

    @data([a,b],[c,d])

    如何从以上数据中获取到列表中每一项值?

    @unpack

    若变量A=[{a:b, a1:b1},{c:d, c1:d1}]

    如何将变量A中的每一组元素作为测试数据?

    @data(*A)

    数据为文件对象:json、yaml

    {"name":"nick","gender":"male","age","29"}

    @ddt.file_data(json文件路径)

    思考:如何结合excel来使用ddt?

    4. 实例

    实例1

    import ddt
    import unittest
    
    @ddt.ddt
    class test_ddt(unittest.TestCase):
    
        @ddt.data(1,2,3,4,5,6,7)
        def test_print(self, a):
            print(a)
    
    
    运行结果:
    Launching unittests with arguments python -m unittest class_ddt.test_ddt in D:python_workshoppython6
    evisefutureloan_API_framework
    1
    2
    3
    4
    5
    6
    7
    
    
    Ran 7 tests in 0.006s
    
    OK

    实例2

    import ddt
    import unittest
    
    @ddt.ddt
    class test_ddt(unittest.TestCase):
    
        @ddt.data([1,2],[10,11])
         def test_print(self, a):
            print(a)
    
    
    运行结果:
    Launching unittests with arguments python -m unittest D:/python_workshop/python6/revise/futureloan_API_framework/class_ddt.py in D:python_workshoppython6
    evisefutureloan_API_framework
    
    
    
    Ran 2 tests in 0.001s
    
    OK
    [1, 2]
    [10, 11]

    实例3

    import ddt
    import unittest
    
    @ddt.ddt
    class test_ddt(unittest.TestCase):
    
        @ddt.data([1,2],[10,11])
        @ddt.unpack
        def test_add_print(self,a,b):
            print(a+b)
    
    
    运行结果:
    Launching unittests with arguments python -m unittest class_ddt.test_ddt in D:python_workshoppython6
    evisefutureloan_API_framework
    3
    21
    
    
    Ran 2 tests in 0.002s
    
    OK

    实例4

    import ddt
    import unittest
    
    data = [1,2,3,4,5,6,7,8,9,10]
    
    @ddt.ddt
    class test_ddt(unittest.TestCase):
    
        #从一个变量当中取值,变量是字典或者列表:表达式:*变量名
        @ddt.data(*data)
        def test_print(self, a):
            print(a)
    
    
    运行结果:
    Launching unittests with arguments python -m unittest D:/python_workshop/python6/revise/futureloan_API_framework/class_ddt.py in D:python_workshoppython6
    evisefutureloan_API_framework
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    
    Ran 10 tests in 0.005s
    
    OK

    实例5

    创建一个json文件my.json,内容为

    {"name":"nick","gender":"male","age":"29"}

    测试用例类为

    import ddt
    import unittest
    
    @ddt.ddt
    class test_ddt(unittest.TestCase):
    
        @ddt.file_data(r"D:python_workshoppython6
    evisefutureloan_API_frameworkmy.json")
        def test_readData_fromJsonFile(self, a):
            """In case of a dict, keys will be used as suffixes to the name of the
            test case, and values will be fed as test data.
            如果文件的内容是一个字典,键名将作为测试用例的后缀,值将作为测试数据"""
            print("从文件读取数据")
            print(a)
    
    
    运行结果:
    Launching unittests with arguments python -m unittest D:/python_workshop/python6/revise/futureloan_API_framework/class_ddt.py in D:python_workshoppython6
    evisefutureloan_API_framework
    从文件读取数据
    29
    从文件读取数据
    nick
    从文件读取数据
    male
    
    
    Ran 3 tests in 0.002s
    
    OK

    参考文章

    https://www.cnblogs.com/hellowcf/p/6962935.html

  • 相关阅读:
    维护是关键 刻录机不读/刻盘故障实例排除
    压缩viewstate
    采用"软改"的方式激活Windows 7
    开启VAIO的VT
    比较通用的存储过程分页
    linux如何安装声卡驱动
    给Fedora11安装五笔
    导入CSV文件到数据库
    Ubuntu第一次登录用户名和密码错误不能登录
    CSS中Position、absolute、Relative、fixed、static的用法
  • 原文地址:https://www.cnblogs.com/my_captain/p/9317100.html
Copyright © 2011-2022 走看看