python對比兩個域名下的響應(yīng)結(jié)果

(還是不太完善,先記錄一下顿仇,免得忘了)

一淘正、思路:

1、相同:接口和參數(shù)完全相同
2臼闻、不同:域名不同
3鸿吆、要做的:對比響應(yīng),對比完產(chǎn)生報(bào)告述呐,方便查看

二伞剑、需要的:

1、對于相同的最好通過讀取配置文件的方式市埋,參數(shù)化進(jìn)行處理黎泣,使用的是ddt
2、域名不同(暫未處理缤谎,寫死了)
3抒倚、對比json,自己總是考慮不全坷澡,有bug托呕,所以查找第三方庫處理(json_tools)
4、報(bào)告频敛,使用unittest執(zhí)行產(chǎn)生報(bào)告BeautifulReport

三项郊、具體:

1、配置文件格式:使用的json處理方式

[
  {
    "description": "草稿列表第一頁",
    "skip": false,
    "interface":"/article/draft?page=2",
    "method": "GET",
    "contentType": "application/x-www-form-urlencoded",
    "data": {}
  },
  {
    "description": "獲取內(nèi)容列表第一頁",
    "skip": false,
    "interface": "/content/contentList?page=1",
    "method": "get",
    "contentType": "application/x-www-form-urlencoded",
    "data": {}
  },
  {
    "description": "視頻的realmlist",
    "skip": true,
    "interface":"/video/realmlist",
    "method": "get",
    "contentType": "application/json",
    "data": {}
  }
]

2斟赚、具體代碼:
【unittest】:https://www.cnblogs.com/daxiong2014/p/10449184.html
自動化測試框架
【ddt】:https://www.cnblogs.com/fukun/p/8671718.html
實(shí)現(xiàn)參數(shù)化
【BeautifulReport】 :https://blog.csdn.net/yiwenrong/article/details/101781792
報(bào)告模板
【json_tools】:https://blog.csdn.net/shuyichao/article/details/88311845
json對比着降,使用json_tools.diff(json01,json02),對比結(jié)果也很直觀拗军,放入一個list中任洞,每個元素都是一個map蓄喇,主要有add,remove和replace三種交掏,add指的是json02比json01多出來的部分妆偏,remove則相反,replace是值不相同的地方盅弛,具體看博客钱骂,關(guān)鍵是如果要過濾的話根據(jù)這個結(jié)果過濾也很方便

image.png

# -*- coding: utf-8 -*-
import json_tools
import json
import unittest
import requests
import ddt
from BeautifulReport import BeautifulReport as bf
import time

'''代碼重構(gòu),對比接口'''

filename = 'conf.json'

def get_interface():
    with open(filename, 'r', encoding='utf8') as fp:
        json_data = json.load(fp)
    return json_data


@ddt.ddt
class Diff(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("****start****")

    @classmethod
    def tearDownClass(cls):
        print("***end***")

    @classmethod
    def req(cls, method, host, interface, data={}, headers={}):
        # 處理請求        
        url = host + interface       
        payload = data
        response = requests.request(method, url, headers=headers, data=payload)        
        return json.loads(response.content)

    @ddt.file_data('conf.json')
    def test_diff(self, description, skip, interface, method, contentType, data):
        if not skip:
            test_host = 'host01'
            nomal_host = 'host02'

            header = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
                'Content-Type': 'application/x-www-form-urlencoded'       
            }   
            print(description)
            print("jh_url:" + test_host + interface)
            print("nomal_url:" + nomal_host + interface)
            print("data:" + str(data))

            header['Content-Type'] = contentType

            jh_res = Diff.req(method, test_host, interface, data,headers=header)
            # print(json.dumps(jh_res, indent=4, ensure_ascii=False))
            nomal_res = Diff.req(method, nomal_host, interface, data,headers=header)
            # print(json.dumps(nomal_res, indent=4, ensure_ascii=False))
            diff_res = json_tools.diff(jh_res, nomal_res)
            print(json.dumps(diff_res, indent=4, ensure_ascii=False))
            self.assertEqual(len(diff_res), 0)
        else:
            print(description)
            print("skip")

if __name__ == "__main__":
    suite = unittest.TestLoader().loadTestsFromTestCase(Diff)
    run = bf(suite)
    # run.report(filename='demo'+"_"+str(int(time.time())),description='test_demo_report')
    run.report(filename='diff', description='test_diff_report')

3挪鹏、運(yùn)行

python xxxx.py

4罐柳、報(bào)告展示:


image.png

image.png

三、問題(待優(yōu)化)

1狰住、host最好也能進(jìn)行配置
2张吉、處理依賴的接口不夠靈活(目前是根據(jù)傳入的description字段進(jìn)行判斷,然后在寫要依賴的接口取值)催植,但是這塊最好也能進(jìn)行配置項(xiàng)
3肮蛹、如果要過濾某些字段的判斷,或忽略list的排序問題
4创南、簡單的平臺化:后續(xù)想用Django實(shí)現(xiàn)伦忠,要做的是上傳配置文件,返回html報(bào)告地址稿辙,用戶點(diǎn)擊地址可查看報(bào)告詳情
5昆码、還有就是想用python腳本實(shí)現(xiàn)代理獲能取所有請求,自動獲取接口邻储、請求頭赋咽,請求參數(shù),自動分別請求不同域名進(jìn)行diff吨娜,哎脓匿,懂得太少。宦赠。陪毡。
6、僅僅是diff了勾扭,但是原本有的功能可能會被忽略毡琉,例如先存數(shù)據(jù),再取數(shù)據(jù)妙色,設(shè)計(jì)流程化請求diff

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桅滋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子燎斩,更是在濱河造成了極大的恐慌虱歪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栅表,死亡現(xiàn)場離奇詭異笋鄙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)怪瓶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門萧落,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洗贰,你說我怎么就攤上這事找岖。” “怎么了敛滋?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵许布,是天一觀的道長。 經(jīng)常有香客問我绎晃,道長蜜唾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任庶艾,我火速辦了婚禮袁余,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咱揍。我一直安慰自己颖榜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布煤裙。 她就那樣靜靜地躺著掩完,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硼砰。 梳的紋絲不亂的頭發(fā)上藤为,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音夺刑,去河邊找鬼缅疟。 笑死,一個胖子當(dāng)著我的面吹牛遍愿,可吹牛的內(nèi)容都是我干的存淫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼沼填,長吁一口氣:“原來是場噩夢啊……” “哼桅咆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坞笙,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤岩饼,失蹤者是張志新(化名)和其女友劉穎荚虚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體籍茧,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡版述,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寞冯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渴析。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吮龄,靈堂內(nèi)的尸體忽然破棺而出俭茧,到底是詐尸還是另有隱情,我是刑警寧澤漓帚,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布母债,位于F島的核電站,受9級特大地震影響尝抖,放射性物質(zhì)發(fā)生泄漏场斑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一牵署、第九天 我趴在偏房一處隱蔽的房頂上張望漏隐。 院中可真熱鬧,春花似錦奴迅、人聲如沸青责。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脖隶。三九已至,卻和暖如春暇检,著一層夾襖步出監(jiān)牢的瞬間产阱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工块仆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留构蹬,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓悔据,卻偏偏與公主長得像庄敛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子科汗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 接口測試自動化的優(yōu)點(diǎn): 1藻烤,web自動化說起來很多人都會直接想到UI自動化這個設(shè)計(jì),很少有人直接第一個概念是接口自...
    路邊看雪的小男孩閱讀 4,908評論 1 26
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,815評論 0 5
  • 1 稍微遲了些起來怖亭,太陽已然到了曬屁股的高空涎显,出門后放棄跑步,利用室內(nèi)十八樓層鍛煉兴猩。同時也是為7.21公司舉辦的垂...
    冬瓜獸閱讀 89評論 0 0
  • 一般來說峭跳,快樂是人們主觀感受到的愉悅的身心狀態(tài)膘婶,也是一種由對存在世界認(rèn)知與體驗(yàn)形成的幸福感缺前、滿意狀態(tài)帶來的多個層次...
    水木James閱讀 418評論 1 1
  • 說到貓蛀醉,我想,我比任何人衅码,都喜歡貓拯刁。兒時,還沒有聽說逝段,為養(yǎng)寵物而養(yǎng)貓垛玻,大多數(shù)人家,為捉老鼠而養(yǎng)貓奶躯。但是帚桩,我父...
    薔薇煙雨閱讀 191評論 0 0