美文网首页Python学习营Python
接口自动化测试参数化问题

接口自动化测试参数化问题

作者: 小迷糊仙 | 来源:发表于2020-07-08 16:54 被阅读0次

    首先,先介绍下,笔者这里用到的参数化方法:
    1、新建json文件,存放测试数据
    2、创建读取json文件数据的函数
    3、对返回数据做处理,使其符合参数化组件@parameterized.expand([(参数1,值1),(参数2,值2)])格式
    注意啦:这里因为读取json文件返回的数据格式为列表,而我们需要的是一个列表嵌套元组类型,因此需要处理

    笔者在做参数化,获取测试数据时,遇到因为没有及时发现读取json文件返回数据类型,导致后面传入的参数一直不对,一直提示:test_api_weather_query()缺少1个必要的位置参数,下面是修改之前的代码:

    
    class ReadWeatherJson(object):
        def __init__(self, filename):
            self.filepath = '../data/' + filename
    
        def read_json(self):
            with open(self.filepath, 'r', encoding='utf-8') as f:
                return json.load(f)
    
    
    if __name__ == '__main__':
        # print(ReadJson("login.json").read_json())
        r = ReadWeatherJson("weather_query.json").read_json()
        #print(r)  #返回是列表形式
        # 将函数返回的结果从字典dict类型转换为列表嵌套元组方式
        # 思路:新建一个空列表,将字典的值存放进去
        list = []
        for value in r:
            list.append(r[value])
        print(list)
        
    打印输出结果:
    ['http://api.avatardata.cn/Weather/Query?key=8ca15c62e3e64495bb5694690f9469a9&cityname=北京', {'Content-Type': 'application/json'}]
    
    

    注意:我这里用了for循环,用dict[值]的方式,才导致的返回结果是列表形式,那么怎么才能得到我们需要的列表嵌套元组形式呢?
    修改如下代码后,问题完美解决~~~~

    class ReadWeatherJson(object):
        def __init__(self, filename):
            self.filepath = '../data/' + filename
    
        def read_json(self):
            with open(self.filepath, 'r', encoding='utf-8') as f:
                return json.load(f)
    
    
    if __name__ == '__main__':
        # print(ReadJson("login.json").read_json())
        r = ReadWeatherJson("weather_query.json").read_json()
        #print(r)  #返回是字典形式
        # 将函数返回的结果从字典dict类型转换为列表嵌套元组方式
        # 思路:新建一个空列表,将字典的值存放进去
        list = []
        list.append((r.get("url"),  
                     r.get("headers")))
        print(list)
        # for value in r:
        #     list.append(r[value])
        
    打印输出结果:
    [('http://api.avatardata.cn/Weather/Query?key=8ca15c62e3e64495bb5694690f9469a9&cityname=北京', {'Content-Type': 'application/json'})]
    
    

    上附参数化测试代码:

    #导包 unittest
    import unittest
    from api.api_weather import ApiWeatherQuery
    from tools.read_weather_json import ReadWeatherJson
    from parameterized import parameterized
    
    #定义读取参数化数据文件的方法
    def get_data():
        datas =ReadWeatherJson("weather_query.json").read_json()
        list = []
        list.append((datas.get('url'),
                    datas.get('headers')))
        return list
        print(list)
    #封装对象层
    #新建测试类
    class TestApiWeatherQuery(unittest.TestCase):
        #新建测试方法
        @parameterized.expand(get_data())
        def test_api_weather_query(self,url,headers):
            #获取城市天气方法
            res =ApiWeatherQuery().api_weather_query(url,headers)
            #断言
            try:
                self.assertEqual('Succes',res['reason'])
                self.assertEqual(0,res['error_code'])
            except AssertionError as e:
                print("用例执行失败!!!")
                print("错误信息:%s" % e)
            else:
                print("用例执行成功~~")
    
    if __name__ == '__main__':
        unittest.main()
    

    问题总结:
    1、在使用参数化组件parameterized时,要注意读取出来的数据格式是否与需要的一致!!!
    2、使用创建空列表,并用get()方法获取键值组成元组,放到空列表中的方法,得到列表嵌套元组数据。

    以上问题是在参数化时候遇到的坑,分享出来,希望能帮到更多的人~~

    相关文章

      网友评论

        本文标题:接口自动化测试参数化问题

        本文链接:https://www.haomeiwen.com/subject/ervccktx.html