一、接口自动化测试中,会用到测试账号,如何合理运用账号?

账号一般用于接口登录、接口用例传参、操作sql等,目前账号是写到yaml配置文件里,如果1个账户使用会出现资源冲突,可以配置多个账号使用,登录脚本中、用例脚本中、sql脚本中,先将读取过来的账号设为全局变量,然后用到的地方进行替换就。保证了账号的更换至需要动配置文件就可以了

二、接口自动化测试中,接口依赖前置数据较多,如何处理?

根据实际情况进行sql初始化数据或调前置接口
1、sql初始化数据
可能某个接口传参数据依赖很多前置接口响应或很多前置条件,首先需要对业务非常熟悉,且相关数据表很熟悉,然后构造合理的sql操作,setup时进行数据初始化前置插入,teardown时清理掉产生的数据,还原环境,保证不对环境进行数据污染,下次可继续复用

requests接口自动化加强学 python接口自动化遇到的问题_sql

2、调前置接口
如果我当前接口依赖5个接口,调这5个接口,其中1个失败,继续重复执行多次,还是失败就失败掉当前接口

三、接口自动化测试中,接口是如何断言?

1、固定单值,用例中写四和响应结果断言

2、固定多值,用例中写四和响应结果断言

3、变动单值,查库与响应结果断言

4、变动多值,列表展示数据,断言前端用到展示出来的字段

2、变动多值,动态的多条列表数据断言

例如:二手房源列表,有单价、总价、面积、朝向、多少人关注等字段

我是把功能用到的字段,多条数据同类型的分别append到一个列表里与数据库查出来多条数据同类型的append到列表里进行断言对比,这样有多少个字段就要断言对比多少次

requests接口自动化加强学 python接口自动化遇到的问题_字段_02

 

四、断言是如何封装的?

可以根据不同类型进行归类断言:

1、code msg类  {"code":0,"msg":"成功"} 、{"code":2603,"msg":"手机号错误"} 

2、data列表数据类

json_data={
     'count_tab_4': 13,
     'total': 13,
     'list': [{
         'created_at': '2019-12-19 16:10:01',
         'updated_at': '2019-12-19 16:15:01',
         'company': {
             'full_name': '项目',
             'short_name': '项目简'
         },
         'task_sex': 1,
         'task_user_id_card': '610523198806273676',
         'task': {
             'type_child_name': '软件开发',
             'users_type_txt': '用户'
         }
     }, {
         'created_at': '2019-12-17 11:25:02',
         'updated_at': '2019-12-17 11:30:02',
         'company': {
             'full_name': '项目',
             'short_name': '项目简'},
         'task_sex': 1,
         'task_name': '啊啊啊任务啊啊',
         'task': {
             'type_child_name': '软件开发',
             'users_type_txt': '用户'}
     }],
     'page_size': 10,
     'page': 1
 }
class Assertion(object):
    sql_values_list = []
    response_values = []

    def __init__(self):
        self.test=ExecSql().exec_sql

    def get_sql_data(self,project,sql_type,sql):
        '''
        查询sql数据组合成list
        :param project:
        :param sql_type:
        :param sql:
        :return:
        '''
        sql_values=self.test(project,sql_type,sql)
        for i in sql_values:
            for j in i:
                self.sql_values_list.append(j)


    def get_response_data(self,response_data, keys=[]):
        '''
        获取接口响应数据组合成list
        :param response_data:
        :param keys:
        :return:
        '''
        if isinstance(response_data, list):
            for value in response_data:
                if isinstance(value, list) or isinstance(value, dict):
                    self.get_response_data(value, keys)
        elif isinstance(response_data, dict):
            for i, j in sorted(response_data.items()):
                if i in keys:
                    self.response_values.append(j)
                else:
                    self.get_response_data(j, keys)
        else:
            pass

    def asser(self,expect,response_data,assert_type=None):
        '''
        断言
        :param assert_type:
        :param expect:
        :param response_data:
        :return:
        '''
        print(self.sql_values_list,self.response_values)
        if assert_type=='type1':
            assert self.sql_values_list==self.response_values
        assert eval(expect)['code'] == response_data['code']
        assert eval(expect)['msg'] == response_data['msg']