基于Python的接口自动化测试(3)

封装接口返回值校验(关键参数校验和参数完整性校验)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
import operateDB
import request

op = operateDB.OperateDB()


class Compare(object):
    global result1

    # 初始化数据(期望值等)
    def __init__(self, param):
        self.except_param = param["code_to_compare"]
        self.except_code = param["code_expect"]
        self.id_case = param["id"]

        self.except_params = param["params_to_compare"]

        self.result_params_name = []

    # 关键参数比较
    def compare_code(self, result_interface):
        try:
            if json.loads(result_interface):
                resultDic = json.loads(result_interface)

                # 判断关键参数是否存在
                if self.except_param in resultDic:

                    # 判断关键参数值是否与预期值相同
                    if str(resultDic[self.except_param]) == str(self.except_code):
                        result = {"code": 00, "message": "参数值相同", "data": []}
                        op.modifyOne("UPDATE case_interface set code_actual='%s',result_code_compare=%s where id=%s"
                                     % (resultDic[self.except_param], 0, self.id_case))
                    else:
                        result = {"code": 10, "message": "参数值不同", "data": []}
                        op.modifyOne("UPDATE case_interface set code_actual='%s',result_code_compare=%s where id=%s"
                                     % (resultDic[self.except_param], 1, self.id_case))
                else:
                    result = {"code": 20, "message": "返回包中不存在此参数", "data": []}
                    op.modifyOne("UPDATE case_interface set result_code_compare=%s where id=%s"
                                 % (2, self.id_case))
            else:
                result = {"code": 30, "message": "返回包格式错误", "data": []}
                op.modifyOne("UPDATE case_interface set result_code_compare=%s where id=%s"
                             % (3, self.id_case))

        except Exception as e:
            result = {'code': '999', 'message': u'关键字参数值比较异常', 'data': []}
            op.modifyOne("UPDATE case_interface set result_code_compare=%s where id=%s"
                         % (999, self.id_case))
            print e.message

        print result
        return result

    # 获取接口返回参数并去重(递归实现)
    def get_compare_param(self, result_interface):
        try:
            # print type(result_interface)
            if isinstance(result_interface, (str, unicode)) and json.loads(result_interface):
                res = json.loads(result_interface)
                self.get_compare_param(res)
            elif isinstance(result_interface, dict):
                for key, value in result_interface.iteritems():
                    self.result_params_name.append(key)
                    if isinstance(value, dict):
                        self.get_compare_param(value)
                    elif isinstance(value, list):
                        for param in value:
                            self.get_compare_param(param)
                    else:
                        continue
            else:
                pass

        except Exception as e:
            return {"code": 999, "message": "处理返回包参数异常", "data": []}
            print e.message

        # set去除重复且有序
        return {'code': '00', 'message': u'成功', 'data': list(set(self.result_params_name))}

    # 参数完整性比较
    def compare_param(self, result_interface):
        try:
            actual_params = self.get_compare_param(result_interface)
            print actual_params["data"]
            if actual_params["code"] == "00":
                actual_params_list = actual_params["data"]
                if set(actual_params_list).issubset(self.except_params):
                    result = {"code": 00, "message": "参数完整性比较一致", "data": []}
                    op.modifyOne('UPDATE case_interface set params_actual="%s",result_params_compare=%s where id="%s"'
                                 % (actual_params_list, 0, self.id_case))
                else:
                    result = {"code": 00, "message": "实际需要参数不在返回值中", "data": []}
                    op.modifyOne('UPDATE case_interface set params_actual="%s",result_params_compare=%s where id="%s"'
                                 % (actual_params_list, 1, self.id_case))

        except Exception as e:
            result = {"code": 999, "message": "处理返回包参数异常", "data": []}
            print e.message

        # print result
        return result


if __name__ == "__main__":
    param = op.queryOne("select * from case_interface limit 1")
    re = request.Request()
    response = re.httpRequest(param["data"]["exe_mode"], param["data"]["url_interface"],
                              eval(param["data"]["header_interface"]),
                              param["data"]["params_interface"])
    com = Compare(param["data"])
    # com.compare_code(response["data"])

    # com.get_compare_param(response["data"])

    com.compare_param(response["data"])

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容