开源API资源及ddt数据驱动测试

 

一、概述:

  • 学习整理开源的API相关资源,及对接口数据驱动的简单测试;
  • DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)
  • 通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。

 

二、现有开源API:

天气查询-GET: https://qqlykm.cn/api/api/tq.php?city=北京

获取网址标题-GET: https://qqlykm.cn/api/api/tle.php?url=www.taobao.com

ping域名对应ip信息 -GET: https://qqlykm.cn/api/ping/ping.php?host=www.baidu.com

淘宝商品搜索-GET: https://qqlykm.cn/api/tb/api.php?so=连衣裙

维梦平台开源的API: https://api.52vmy.cn/

图片文字识别-POST: https://api.oioweb.cn/api/action.php   ...........file=图片名称

 

开源接口汇总:

https://api.oioweb.cn/

https://api.uomg.com/

https://docs.tenapi.cn/tencent/group-avatar.html

https://api.vvhan.com/

https://blog.csdn.net/weixin_44155115/article/details/105086219

 

 

三、场景测试:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
import requests
from ddt import ddt, data

#_________________________使用ddt分别查询北京、广州、武汉天气______________________________
@ddt
class FooTestCase(unittest.TestCase):

    @data({"city":"北京"}, {"city":"广州"}, {"city":"武汉"})#这里传字典
    def test_map(self, key1):
        print('获取key1的值',key1)
        url="https://qqlykm.cn/api/api/tq.php"
        r=requests.get(url=url,params=key1)
        print(r.text)
        print('\n')


if __name__ == '__main__':
    unittest.main()

 

 

四、ddt基本语法:

使用场景一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并没什么区别; 这个时候就可以利用ddt来管理测试数据,提高代码复用率

#!/usr/bin/env python
# encoding: utf-8

import unittest
from ddt import ddt,data,unpack


##_________________读数据:整体列表,字典、元组______________________________
@ddt
class MyTest(unittest.TestCase):

    #@data([1,2,3,4,5,6,7]) ##传递list
    #@data({"a":"1","b":2}) ##传递字典
    @data((1,2,3)) ##元组
    def test(self,data):
        print(data)
        print('data类型:',type(data))

if __name__ == '__main__':
    unittest.main(verbosity=2)



#_____________________________________读数据:整数_________________________________________________
@ddt
class Testwork(unittest.TestCase):

    @data(1,2,3)
    def test_01(self,value):  #value用来接收data的数据
        print(value)
if __name__ == '__main__':
    unittest.main()



##__________________________________读数据:嵌套列表、元组、字典的整体传递方式________________________
@ddt
class MyTest(unittest.TestCase):
    #___________________嵌套使用(拆分遍历)____________________
    # @data(*[[1,2,3],[1,0,1],[0,0,0],[1,1,3]])
    # @data(*[{"a":1}, {"a":2}, {"a":3}, {"a":4}])
    @data(*[(1,5), (4,2), (6,7), (5,6)])
    def test_01(self,data):
        print(data)
    #______________________不加* 直接当成整体_______
    #@data([{"a":1}, {"a":2}, {"a":3}, {"a":4}])
    @data([(1,5), (4,2), (6,7), (5,6)])
    def test_02(self,data):
        print(data)


if __name__ == '__main__':
    unittest.main(verbosity=2)



##____________________________读数据:使用unpack_多组分解元素_______________________________________________
@ddt
class Testwork(unittest.TestCase):

   # @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'},{'chen':363,'wei':'wowo'}])  #字典
    @data((1,2,3),(4,5,6))      #这里可以是元组、list、字典
    @unpack                     #拆分数据
    def test_01(self,a,b,c):  #每组数据有3个值,所以设置3个形参
        print(a)

if __name__ == '__main__':
    unittest.main()




##____________________________________________读文件数据(json和yml)_____________________________________________________________
from ddt import ddt,data,unpack,file_data

###############读取整体文件###################
# @ddt
# class MyTest(unittest.TestCase):
#
#     @file_data('chen.json') #读取json文件
#     #@file_data('wei.yml') #读取yml文件
#     def test_data_list(self,value):
#         print(value)
#
# if __name__ == '__main__':
#     unittest.main()



###############推荐:读取文件遍历(图一)###################
@ddt
class MyTest(unittest.TestCase):

    #@file_data('chen.json') #读取json文件
    @file_data('wei.yml') #读取yml文件
    def test_data_list(self,value):
        #遍历数据
        for i in value:
            name=i.get('username')
            print(name)


if __name__ == '__main__':
    unittest.main()




###############读取文件遍历(图二)###################
@ddt
class MyTest(unittest.TestCase):

    #@file_data('chen.json') #读取json文件
    @file_data('wei.yml') #读取yml文件
    def test_data_list(self,value):
        #遍历获取数据
        for i in range(len(value)):
            print(value[i]['case'+str(i)]['username'])

if __name__ == '__main__':
    unittest.main()

 

 

5参数化模块parameterized

备注:parameterized模块和ddt差不对,都是数据驱动测试

#!/usr/bin/env python
# encoding: utf-8
import unittest
from parameterized import parameterized, parameterized_class   # 引入parameterized模块

###________________________________parameterized用于参数化,和ddt类似_______________________________________________
a = [(1,2,3), (4,5,7)]
bbb=[{'模块': '获取天气', '请求方式': 'GET', '请求数据': 'city=北京', '预期结果': '车位为陈伟'},{'模块': '测试', '请求方式': 'post', '请求数据': 'city=广州', '预期结果': '2222222'}]

class ceshi(unittest.TestCase):

    def test01(self):
        self.assertEqual(2,2)

    @parameterized.expand([(1,2,3),(4,3,7)])#嵌套list
    def test02(self,a,b,c):
        print('从0开始打印第1个元素',b)
        print(a,b,c)
        s = a+b
        #self.assertEqual(s,c)
        self.assertEqual(1,1)

    ##@parameterized.expand([{'模块': '获取天气', '请求方式': 'GET', '请求数据': 'city=北京', '预期结果': '车位为陈伟'},{'模块': '测试', '请求方式': 'post', '请求数据': 'city=广州', '预期结果': '2222222'}])#列表嵌套字典
    @parameterized.expand(bbb)#可以通过变量或函数
    def test_03(self,a,b,c,d):
        print('从0开始打印第1个元素',b)
        print(a,b,c,d)
        self.assertEqual(1,1)#断言是否相等



if __name__=='__main__':
    unittest.main()




#_______________________________________________parameterized参数化字典(遍历字典)_______________________________________________

a = [(1,2,3), (4,5,7)]
bbb=[{'模块': '获取天气', '请求方式': 'GET', '请求数据': 'city=北京', '预期结果': '车位为陈伟'},{'模块': '测试', '请求方式': 'post', '请求数据': 'city=广州', '预期结果': '2222222'}]

@parameterized_class(bbb)
class ceshi(unittest.TestCase):

    def test01(self):
        self.assertEqual(2,2)

    def test_02(self):
        print(self.请求方式)#获取字典的key
        print('---------------------')
        self.assertEqual(1,1)#断言是否相等


if __name__=='__main__':
    unittest.main()

 

 

 

 

 

 

 

相关链接:

https://blog.csdn.net/lelemom/article/details/83184767 ............................python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(普通版)

https://blog.csdn.net/NoamaNelson/article/details/107462355 ..................python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(进化版)

https://mp.weixin.qq.com/s/oYTh--x3ngBYYziVU8CUMg ...........................基于Python+requests+Excel数据驱动的接口自动化测试中解决接口间数据依赖

https://blog.csdn.net/lingxiyizhi_ljx/article/details/106279105 ..................ddt 实现数据驱动

https://www.cnblogs.com/lslin/p/12546563.html ......................................ddt的用法

https://www.cnblogs.com/qican/p/13297917.html ...................................ddt读取yml、json文件数据

 

posted on 2021-04-09 10:20  chen_2987  阅读(346)  评论(0)    收藏  举报

导航