基于Python的接口自動(dòng)化測(cè)試(3)

封裝接口返回值校驗(yàn)(關(guān)鍵參數(shù)校驗(yàn)和參數(shù)完整性校驗(yàn))

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

import json
import operateDB
import request

op = operateDB.OperateDB()


class Compare(object):
    global result1

    # 初始化數(shù)據(jù)(期望值等)
    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 = []

    # 關(guān)鍵參數(shù)比較
    def compare_code(self, result_interface):
        try:
            if json.loads(result_interface):
                resultDic = json.loads(result_interface)

                # 判斷關(guān)鍵參數(shù)是否存在
                if self.except_param in resultDic:

                    # 判斷關(guān)鍵參數(shù)值是否與預(yù)期值相同
                    if str(resultDic[self.except_param]) == str(self.except_code):
                        result = {"code": 00, "message": "參數(shù)值相同", "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": "參數(shù)值不同", "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": "返回包中不存在此參數(shù)", "data": []}
                    op.modifyOne("UPDATE case_interface set result_code_compare=%s where id=%s"
                                 % (2, self.id_case))
            else:
                result = {"code": 30, "message": "返回包格式錯(cuò)誤", "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'關(guān)鍵字參數(shù)值比較異常', '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

    # 獲取接口返回參數(shù)并去重(遞歸實(shí)現(xiàn))
    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": "處理返回包參數(shù)異常", "data": []}
            print e.message

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

    # 參數(shù)完整性比較
    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": "參數(shù)完整性比較一致", "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": "實(shí)際需要參數(shù)不在返回值中", "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": "處理返回包參數(shù)異常", "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"])

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容