接口自动化测试--参数的传递

最近在写一个车险比价流程的接口自动化,各个接口之间涉及到一些参数的传递与复用,做以下总结:
数据源的产生:基本的车辆信息 险种选择

  • 车辆信息
    车辆信息倘若固定下来,接口自动化的意义就不打了,我们要能够根据当前日期选择合适的车辆信息(一般在上年车险至期前60天),数据来源选择:数据库
  • 险种选择
    险种:交强险+商业险 +车船税;商业险又可分为:车损险,三者险…;对于这些信息字段固定,各个车辆的复用性较高,抽离出来作为配置文件配置

接口简化可概括为两个方面:

  1. 生成代表用户信息及车辆信息的insured_id
  2. 根据当前报价区域选择可报价的保险公司进行比价报价

参数的传递选择:XML文件
选择整个流程用到的所有参数作为key生成xml文件,接口请求的时候根据所需要的参数选择合适的value;
生成xml

	host = config.get_data('mysql').get('host')
    port = config.get_data('mysql').get('port')
    user = config.get_data('mysql').get('user')
    passwd = config.get_data('mysql').get('passwd')
    db = config.get_data('mysql').get('db')
    helper = MysqlHelper(host=host,port=port,db= db,user=user,passwd=passwd)
    dictdata = helper.get_xubao(province=province,city=liben,company=company,date=date)[0]
    dictinsure = config.get_data('insured')
    dictdata = dict(dictdata, **dictinsure)
    impl = minidom.getDOMImplementation()
    doc = impl.createDocument(None, None, None)
    rootElement = doc.createElement('dates')
    for key, value in dictdata.items():
        # 创建子元素
        childElement = doc.createElement('date')
        # 为子元素添加id属性
        childElement.setAttribute('name', str(key))
        childElement.setAttribute('value', str(value))
        # 将子元素追加到根元素中
        rootElement.appendChild(childElement)
        # 将拼接好的根元素追加到dom对象
        doc.appendChild(rootElement)
        # 打开test.xml文件 准备写入
    filename = os.path.join(Path().get_data_path(),filename)
    f = open(filename, 'w', encoding='UTF-8')
    # 清空数据
    f.seek(0)
    f.truncate()
    # 写入文件
    doc.writexml(f, addindent=' ', newl='\n', encoding='UTF-8')
    # 关闭
    f.close()

接口参数读与写文件

 			url, params, method = self.get_duojia_data_info('test_get_car_model_no_info')
            for key in params:
                params[key] = self.fg.getValueByName(key)
            basehttp = self.accesss(url, params, method)
            basehttp.set_cookie(self.cookie)
            r = basehttp.get_post()
            #选择最接近的车型
            diff = []
                for i in range(len(r.json()['data'])):
                    diffvalue = abs(
                        r.json()['data'][i]['price'] / float(10000) - float(self.fg.getValueByName('price')))
                    diff.append(diffvalue)
                index = diff.index(min(diff))
                self.fg.setValueByName('price', value=str(r.json()['data'][index]['price'] / float(10000)))
                self.fg.setValueByName('seat_num', value=str(r.json()['data'][index]['seat']))
                self.fg.setValueByName('selected_car_model_detail',
                                       value=json.dumps(r.json()['data'][index], sort_keys=True, indent=4,
                                                        separators=(',', ':'),
                                                        ensure_ascii=False))
                                                       

参数化报价

#报价
@pytest.mark.parametrize("province,city,insurance_company,filename",all_data)
def test_record_price(get_duojia_data_info,province,city,insurance_company,filename):
	pass

你可能感兴趣的:(接口自动化测试框架)