(10)關(guān)于接口自動化的那些事 - 基于 Python

轉(zhuǎn)自:https://testerhome.com/topics/8091

開始之前說一些廢話

前段時間老大讓我搞個接口自動化,好氣啊我只想當(dāng)個純粹的點(diǎn)點(diǎn)點(diǎn)?。ㄕ鏇]志氣真沒用,真給咱測試丟臉~!
后來我挑燈夜讀,經(jīng)過兩個星期的掙扎終于把用例搞出來了!噢哈哈真是大快人心啊我真?zhèn)€聰明的家伙給自己一個[
我把做出來的成果貼出來,也順便把學(xué)習(xí)的經(jīng)過貼出來,大家來看看有什么地方可以做得更好的,一起交流學(xué)習(xí)呀,我會是一個悉心聽教的好學(xué)生的嗯!Begin

準(zhǔn)備工作

這部分其實(shí)在谷歌或者百度上搜索下就可以完成的,可是我就是想再啰嗦一遍,說不定有比我更懶的同學(xué)呢哈哈~

第一步 Python的安裝配置

  • 打開官網(wǎng): https://www.python.org/downloads/ 目前官網(wǎng)上已經(jīng)更新到3.6.1啦,有兩個版本,大家可以按自己喜歡的去下載,我自己選擇的是Python3.5,語法對比2.7版本的會有些改進(jìn),用2.7版本的小朋友貼我的代碼是會報錯的哦!

  • 安裝并配置環(huán)境 安裝過程非常的簡單,選擇你想安裝的目錄,然后拼命的點(diǎn)擊下一步,然后在最后一步的時候,記得記得記得要勾選底部的“Add Python 3.5 to PATH”,這樣的話,你就不用手動去系統(tǒng)環(huán)境中配置啦,是不是很easy呢!媽媽再也不用擔(dān)心你的學(xué)習(xí)啦~(最好再檢查一下下啦,快捷鍵Windows+R ,打開CMD命令,輸入“python”,如果沒有報錯,那就恭喜你,安裝成功~)

  • Python小提示 學(xué)好Python語言很重要哦~跟我一樣的菜鳥們可以找一本Python基礎(chǔ)教程,照著例子一個個去練習(xí),不要偷懶哦,只有自己動手寫了才會記得更牢呢,親測有效!在這里推薦一個非常好的學(xué)習(xí)教程,傳送門 -> 廖雪峰的Python教程 來來來,菜鳥們跟我念個順口溜:學(xué)好Python真重要,走遍天下都不怕~(好像根本就不順口??!

第二步 Python編輯器的選擇及使用

  • 終于又到了選擇編輯器的矯情時刻了,據(jù)我短淺的頭腦所知,目前比較流行的編輯器有Sublime Text3,Pycharm,Atom等,我自己有使用過Sublime Text3和Pycharm,個人感覺Pycharm比較符合我的編程習(xí)慣,它是Python重量級IDE,能自動檢測語法,幫助使用者寫出更規(guī)范的代碼,大家如果有時間的話可以多去使用其它款編輯器,選一個自己最順眼的,那碼起代碼來也會爽歪歪~
  • Pycharm傳送門 -> http://www.jetbrains.com/pycharm/download/#section=windows 蹬蹬!!看到兩個版本就開始頭疼啦哈哈別慌,毫不猶豫選擇右邊的社區(qū)版吧 人家專業(yè)版是留給大神級別的啦哈哈~ [圖片上傳失敗...(image-e6051d-1542258838095)]

    (但據(jù)專業(yè)人士透露,社區(qū)版和專業(yè)版的區(qū)別并不大,一般的編程開發(fā)使用社區(qū)版就足夠啦所以寶寶們不需要太糾結(jié)版本

第三步 打開Python編輯器,開始練習(xí)吧

  • 恭喜你完成了前面的步驟,到了這一步,咱們就可以開始練習(xí)python啦(如果是選擇了Pycharm的同學(xué),有關(guān)于Pycharm的配置略復(fù)雜,在這里我就不詳細(xì)解說啦,萬能的谷歌可以幫助你[圖片上傳失敗...(image-2956c4-1542258838095)]

網(wǎng)絡(luò)請求模擬小技巧

在學(xué)習(xí)了一段時間的Python語言后,咱也大概對Python的語法和邏輯有了一定的積累,接下來,可以為接口自動化測試開始嘗試做一些比較簡單的準(zhǔn)備工作啦跟著我一起來來來

擴(kuò)展庫requests

一般來說接口測試都是基于HTTP和HTTPS的網(wǎng)絡(luò)請求,Python中有很多自帶原生庫和擴(kuò)展庫均可以實(shí)現(xiàn)。Python模擬HTTP請求有兩種方式,一種是使用httplib模塊,一種是使用requests模塊,我個人比較傾向于使用requests庫,該庫把請求的框架都搭建好了,使用簡潔明了呢~[圖片上傳失敗...(image-e93596-1542258838095)]

  • 使用requests

首先要安裝及導(dǎo)入擴(kuò)展庫requests,咱可以使用pip來擴(kuò)展第三方庫,打開CMD,輸入pip install requests,安裝完成后,打開編輯器,練習(xí)使用requests庫,廢話不多說,直接上代碼~

GET請求方式模擬:

import requests      #調(diào)用requests庫test_url = 'http://xxx:8080.com'      #訪問接口的url地址response = requests.get(test_url)       #發(fā)起一個請求,使用get方法result = response.text          #讀取請求返回的結(jié)果print(result)     #打印返回的結(jié)果

POST請求方式模擬:

import requests      #調(diào)用requests庫username = 'ningxw'    #定義參數(shù)usernamepassword = '123456'   #定義參數(shù)passwordtest_url = 'http://xxx:8080.com'      #訪問登錄接口的url地址datalist = {'uname': username, 'pwd': password}    #將參數(shù)添加到需求post的data中head = {"Content-Type": "application/Json"}   #定義頭部response = requests.post(test_url, datas=datalist, headers=head)   #發(fā)起一個請求,使用post方法result = response.text          #讀取請求返回的結(jié)果print(result)   #打印返回的結(jié)果

其實(shí)我的廢話是可以不用說這么多的,給你們分享一個快速學(xué)習(xí)requests的干貨,傳送門 -> 快速上手 - Requests ,但是我就是想要展示下我的才氣啊,我要表露出我博學(xué)多才的氣質(zhì)!哼!

簡單的接口自動化測試用例

恭喜你啊恭喜我啊,能把上面的網(wǎng)絡(luò)請求掌握了,咱就可以繼續(xù)下一步了因?yàn)槎昧巳绾蜗蚪涌谡埱髷?shù)據(jù),那我們就可以根據(jù)返回的數(shù)據(jù)來進(jìn)行斷言啦,斷言是接口測試的重要部分哦

做接口測試前的準(zhǔn)備

  • 理解業(yè)務(wù)需求

所有測試的基礎(chǔ),都離不開對業(yè)務(wù)的理解,接口測試也是一樣的只有搞清楚業(yè)務(wù)的需求和邏輯,咱們才可以設(shè)計(jì)出一個比較好的用例哦(我感覺我在講廢話!

了解業(yè)務(wù)需求,比較快速簡單的做法是可以從產(chǎn)品經(jīng)理那邊要求獲取一份項(xiàng)目的原型,一般原型里面會把項(xiàng)目的內(nèi)容說得很清楚,里面包含了比較重要的業(yè)務(wù)邏輯~

了解代碼邏輯,可以通過開發(fā)已完成的代碼去理解代碼邏輯和業(yè)務(wù)邏輯,顯然這部分對于大部分測試包括身為菜鳥的我是一樣的難,但不得不說這是一個通往更高層面的測試的必經(jīng)之路,開發(fā)的代碼里面會包括多個開發(fā)的溝通協(xié)調(diào)及測試人員本身的編程基礎(chǔ)和測試思想,為了不讓自己成為輕易取代的人,咱必須得努力起來呀干呀

  • 查看規(guī)范的接口文檔

咱做接口測試,就得對接口有深入的了解,所以一份規(guī)范的接口文檔會讓接口自動化測試事半功倍但是呢,要沉淀出一份規(guī)范的接口文檔,對開發(fā)來說無疑是增加重復(fù)勞動力的事情,而很多開發(fā)也不大愿意想幫助測試做些什么事(我就常常被之前公司的開發(fā)鄙視,說我不務(wù)正業(yè),瞎搞東西,讓我做好點(diǎn)點(diǎn)點(diǎn)工作就好!真是好氣哦??!

)所以說呀,凡事還是靠自己呀,要是咱掌握了代碼的能力,我們就可以自己去看代碼了呀,就可以自己整理出接口文檔,又不用有求于人,說不定還可以被上司賞識,從此升職加薪走上人生巔峰迎娶白富美…

好了,想想就好了,踏實(shí)的工作最重要呢~~

最后最后,我有一份不太規(guī)范的接口文檔,但是對我來說也已經(jīng)足夠了,給你們這些沒瞧過接口文檔的小小菜鳥看看,長長見識哈哈哈~(擁有規(guī)范的接口文檔的大神請無視我就可以了感激不盡~

  • 編寫代碼完成接口測試

噔噔噔噔~一把鼻涕一把淚的終于要來到寫代碼測試接口的時刻了

在理清了業(yè)務(wù)需求和邏輯后,我們就可以開始試著去寫一些請求了,看看接口返回的內(nèi)容是不是我們預(yù)期的結(jié)果,然后通過斷言來判斷測試的結(jié)果在寫一個較為完整的用例之前,我們還是需要先鞏固Python編程,了解一下有關(guān)數(shù)組的內(nèi)容,json數(shù)據(jù)格式及轉(zhuǎn)換方式,unittest框架等,這樣你才可以在寫代碼的時候游刃有余噢??!
貼一下我常用的接口自動化測試代碼的基本格式和內(nèi)容:

import unittest       #導(dǎo)入unittestimport requests     #導(dǎo)入requests庫import json            #導(dǎo)入jsonclass LianXi(unittest.TestCase):              #定義一個類,類的首字母要大寫哦       def setUp(self):                                 #初始化             self.base_url = 'http://ip:端口號/url地址'             def test_get_success(self):             #定義一個方法,切記要以test開頭哦             datalist = {'參數(shù)1': '值1', '參數(shù)2': '值2'}               #定義傳參數(shù)據(jù)             head = {"Content-Type": "application/Json"}     #定義頭部             r = requests.post(self.base_url, params=datalist, headers=head)          #傳入?yún)?shù)             result = json.loads(r.text)            #使用json格式返回             self.assertEqual(result['status'], 0)      #檢驗(yàn)返回值             print(result)if __name__ == '__main__':      unittest.main()

以上就是我編寫自動化用例的基本模板了,才疏學(xué)淺啊各位大神多多指教~[圖片上傳失敗...(image-efb08a-1542258838098)]

在編寫測試代碼的時候,會很糾結(jié)在post數(shù)據(jù)的時候,應(yīng)該選用哪個關(guān)鍵字參數(shù),也許聰明的你熟讀上面我分享的干貨《快速上手 - Requests》就可以搞懂,但是蠢萌的我還是沒能完全掌握??!

于是在我無數(shù)次的谷歌之后,我找到一個可以暫時解答我疑惑的回答,傳送門 -> http://stackoverflow.com/questions/9733638/post-json-using-python-requests ,這部分還是需要多花點(diǎn)時間去學(xué)習(xí)和鞏固哦~

接口自動化實(shí)踐

前面啰啰嗦嗦的寫了這么多基礎(chǔ)的東西,目的就是為了讓比我還菜鳥的寶寶們方便學(xué)習(xí)到了這一章,估計(jì)也是本文的最后一章啦啦啦,咱們就來說說接口自動化的實(shí)踐吧寶寶們,帶上你的大腦,跟著我一起high high high(一言不合就想唱歌的老毛病居然犯了

我現(xiàn)在做的項(xiàng)目是一個提供用戶查詢物流信息的系統(tǒng),就給大家講解一個最簡單的“增加單號”接口的例子吧~

  • 業(yè)務(wù)需求

我們把“增加單號”的業(yè)務(wù)需求逐條提煉出來~

| 編號 | 業(yè)務(wù)步驟 |
| 1 | 用戶登錄 |
| 2 | 輸入單號 |
| 3 | 檢驗(yàn)單號是否重復(fù) |
| 4 | 檢驗(yàn)單號是否超過今日追蹤數(shù)量 |
| 5 | 增加單號成功 |

  • 根據(jù)業(yè)務(wù),定義需要處理的函數(shù)

| 編號 | 函數(shù) |
| 1 | 初始化數(shù)據(jù):setup(),用來初始化一些比較常用到的數(shù)據(jù) |
| 2 | 用戶登錄:test_getcookie() ,用來獲取用戶登錄的cookie |
| 3 | 增加單號成功:test_addtrackno_success(),用來測試增加單號接口 |

  • 初步的自動化框架

根據(jù)定義的函數(shù),可以初步搭建出一個簡陋的自動化框架,就是下面那一坨~

class AddTrackNo():         def setup():         #初始化數(shù)據(jù)         def test_getcookie():         #獲取用戶登錄的cookie         def test_addtrackno_success():         #測試增加單號接口

看到這里,我知道有人想對我的設(shè)計(jì)以深深的鄙視來吐槽我,來啊造作啊,反正你又打不著我!!哈哈哈~~[圖片上傳失敗...(image-c06fd0-1542258838098)]

[圖片上傳失敗...(image-81a3f6-1542258838098)]

  • 還是簡單粗暴點(diǎn),上代碼吧

上代碼前啊我就是想裝逼說幾句,如今這世道都是套路,不過只要你掌握了其中的思想和工具,那就不在怕的了!就一個字,上!!

# -*- coding: utf-8 -*-#導(dǎo)入各種庫import requestsimport jsonimport unittestimport pymssqlimport xlrdimport reclass AddTrackNo(unittest.TestCase):    '''“(批量)增加單號”接口'''    def setUp(self):        '''初始化數(shù)據(jù)'''        self.user_url = 'https://xxxxxxuser/call'        self.buyer_url = 'https://xxxxxxorder/call'        '''查詢數(shù)據(jù)庫中登錄用戶的信息'''        self.conn = pymssql.connect(host='192.xx.xx.xx', user='sa', password='123456', database='Test_Buyer1')        cur = self.conn.cursor()        sql = 'SELECT TrackNO FROM TrackInfo02 WHERE (Email = '123@qq.com')'        cur.execute(sql)        self.result = cur.fetchall()    def tearDown(self):        '''關(guān)閉數(shù)據(jù)庫'''        self.conn.close()    def test_getcookie(self):        '''用戶登錄,獲取cookie<賬號:123@qq.com>'''        data = {"Version": "xxx",                "Method": "Signin",                "SourceType": xx,                "Param":                    {"Email": "123@qq.com",                     "Password": "123456"}                }        req = requests.post(self.user_url, json=data)        res = json.loads(req.text)        self.assertEqual(res["Code"], 0)        self.assertEqual(res['Json']['FEmail'], '123@qq.com')        #print(res)        cookie = res["Cookies"]        return cookie       #返回用戶cookie    def test_addtrackno_success(self):        '''成功_增加單號(狀態(tài)碼:0 保存成功)'''        '''查詢數(shù)據(jù)庫中該用戶下的單號'''        result = self.result        '''獲取EXCEL表內(nèi)的單號'''        file = xlrd.open_workbook(r'C:\Users\xx\test_trackno.xlsx')        sheet = file.sheet_by_name('單號數(shù)據(jù)')        cols = sheet.col_values(0)        n = len(cols)        '''去除重復(fù)單號,并post增加單號'''        index = 0        arylist=[]        for row in result:            a = re.findall('[a-zA-Z0-9]', str(row))            sj = ''.join(a)            arylist.append(sj)            index += 1        j = 0        for i in range(n):            if(j == 5):                break            if(cols[i] not in arylist):                if len(result)>= 40:                    break                else:                    j += 1                    datalist = {"Version": "xxx",                             "Method": "AddTrackNo",                             "Cookies": self.test_getcookie(),                             "SourceType": xx,                             "Param": {                                "TrackNos": [cols[i]]}                             }                    req1  = requests.post(self.buyer_url, json=datalist, headers={"Content-Type": "application/Json"} )                    res = json.loads(req1.text)                    print(res)                    self.assertEqual(res['Code'], 0)                    self.assertEqual(res['Json']['Items'][0]['ResultCode'], 0)
  • 完善自動化測試用例

以上展示的就是其中一個接口的設(shè)計(jì)和實(shí)現(xiàn),是不是很簡單呢!

在實(shí)際的項(xiàng)目中肯定會遇到很多很多接口,那咱寫完一個接口,肯定不想一個個的跑起來呀,那我們就可以再創(chuàng)建一個文件,使其做自動化跑接口用例~

Run_Tests.py代碼如下:

import time, osimport sysimport unittestfrom HTMLTestRunner import HTMLTestRunner     #引入HTMLTestRunner模板sys.path.append('./Interface')    test_dir = './interface'       #指定當(dāng)前文件夾下的Interface目錄file = unittest.defaultTestLoader.discover(test_dir, pattern='*_test.py')    #匹配開頭為test的py文件if __name__=="__main__":    now = time.strftime("%Y-%m-%d %H-%M-%S", time.localtime(time.time()))    # 取當(dāng)前時間    public_path = os.path.dirname(os.path.abspath(sys.argv[0]))       # 獲取當(dāng)前運(yùn)行的.py文件所在的絕對路徑    filename = public_path + "\\Report\\" + now + "report.html"   #保存的報告路徑和名稱    fp = open(filename, 'wb')    runner = HTMLTestRunner(stream=fp,                            title="接口自動化報告",                            description="詳細(xì)描述如下:"                            )    runner.run(file)     #執(zhí)行測試套件    fp.close()

運(yùn)行該文件,就可以把很多很多接口用例跑起來啦~

代碼寫得就跟我一樣的粗糙??!不過都是新鮮出爐的哈,以后有時間,我會認(rèn)認(rèn)真真去規(guī)范代碼,爭取做個努力上進(jìn)的菜鳥~(認(rèn)認(rèn)真真規(guī)范的代碼增加啦已經(jīng) ~~~ 耶耶耶 ~~~

優(yōu)化接口自動化用例

啦啦啦啦啦~ 努力上進(jìn)的小菜鳥又花了一些時間優(yōu)化了下代碼結(jié)構(gòu)

上面的一大部分內(nèi)容已經(jīng)講解了如何搭建一個丑陋的自動化接口測試框架,但是呢,愛美嘛是人的天性,自己擼出來的代碼也要美化一下呀,不然怎么對得起自己的臭美天性呢哈哈~

來來來,一起來看看這個“整容”過程吧 ~ 嘻嘻 ~

  • 增加配置文件(conf.ini,請注意內(nèi)容,有血的教訓(xùn)之提示?。。?/strong>

conf.ini (主要配置數(shù)據(jù)庫、url、用戶信息、狀態(tài)碼等常用數(shù)據(jù)信息)

[test_db]#數(shù)據(jù)庫信息(注意不要帶上引號哦,不然會報錯哦?。。。﹉ost = 192.168.xx.xxuser = sapassword = sa123db_test_buyer = Test_Buyer1[user_info]#用戶信息email = "123@qq.com"upassword = "123456"[url]#請求的接口地址(url不要帶上引號哦,不然會報錯哦?。。。﹗ser_url = https://xxxxxxuser/call[code]#成功狀態(tài)success = 0#追蹤號已存在,已添加該單號TrackNoIsExist = -11010101#追蹤號無效TrackNoInvalid = -11010102
  • 初始化配置文件config.py(初始化并封裝配置文件的數(shù)據(jù))
import configparser    #導(dǎo)入configparser庫,用于讀取配置文件import os class Config():    def __init__(self):        self.config = configparser.ConfigParser()        self.conf_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'conf.ini')    #獲取制定配置文件所在路徑        self.config.read(self.conf_path, encoding='utf-8-sig')     #讀取配置文件,編碼格式為utf-8-sig        self.conf = {            'host': '', 'user': '', 'password': '', 'db_test_buyer': '', 'email': '', 'upassword': '', 'user_url': '', 'success': '', 'TrackNoIsExist ': '', 'TrackNoInvalid ': ''                        }        def get_conf(self):        """        配置文件讀取,并賦值給全局參數(shù)        :return:        """        self.conf['host'] = self.config.get("test_db", 'host')        self.conf['user'] = self.config.get("test_db", "user")        self.conf['password'] = self.config.get("test_db", "password")        self.conf['db_test_buyer'] = self.config.get("test_db", "db_test_buyer")        . . . . . .         return self.confif __name__ == '__main__':    Config()
  • 增加公共文件Common_Func.py(主要配置數(shù)據(jù)庫連接、獲取用戶cookie等常用函數(shù))
import Conf.config          #導(dǎo)入Conf文件夾下的config.py文件,用于初始化配置文件import pymssql                #導(dǎo)入pymssql,用于連接SqlServerimport requestsimport jsondef Get_TrackNo():    '''初始化數(shù)據(jù)'''    c = Conf.config.Config().get_conf()   #調(diào)用config.py文件的get_conf()函數(shù)    '''數(shù)據(jù)庫配置'''    db_host = c["host"]    db_user = c["user"]    db_password = c["password"]    db_test_buyer = c["db_test_buyer"]    db_test_user = c["db_test_user"]    '''連接SqlServer數(shù)據(jù)庫'''    conn_buyer = pymssql.connect(host=db_host, user=db_user, password=db_password, database=db_test_buyer)    cur_buyer = conn_buyer.cursor()    sql_buyer =sql = 'SELECT TrackNO FROM TrackInfo02 WHERE (Email = '123@qq.com')'    cur_buyer.execute(sql_buyer)    trackno_result = cur_buyer.fetchall()    '''關(guān)閉數(shù)據(jù)庫連接'''    cur_buyer.close()    cur_user.close()    return trackno_result      #返回單號列表結(jié)果def Get_Cookie():    '''用戶登錄,獲取cookie<賬號:123@qq.com>'''    c = Conf.config.Config().get_conf()   #調(diào)用config.py文件的get_conf()函數(shù)    user_url = c["user_url"]    user_email =c["email"]    user_pwd = c["upassword"]    data = {"Version": "xxx",            "Method": "Signin",            "SourceType": xxx,            "Param":                {"Email": user_email,                "Password": user_pwd }                }    req = requests.post(user_url, json=data)    uid = req.cookies.get('uid')    return uid                              #返回用戶cookie
  • 修改“增加單號”接口文件Addtrackno_test.py
# -*- coding: utf-8 -*-import requestsimport jsonimport unittestimport xlrdimport reimport Conf.config     #導(dǎo)入配置文件import Common_Func      #導(dǎo)入公共文件Common_Func.pyclass AddTrackNo(unittest.TestCase):    '''“(批量)增加單號”接口'''    def setUp(self):        '''初始化數(shù)據(jù)'''        '''獲取請求地址'''        c = Conf.config.Config().get_conf()   #調(diào)用config.py文件的get_conf()函數(shù)        self.buyer = c["buyer_url"]        '''獲取狀態(tài)碼'''        self.success = c["success"]      #成功的狀態(tài)碼        self.TrackNoIsExist = c["TrackNoIsExist"]      #其它狀態(tài)碼        '''獲取某賬號下的單號列表'''        self.trackno_result = Common_Func.Get_TrackNo()        '''獲取某賬號的cookie值'''        self.user_cookie = Common_Func.Get_Cookie()    def tearDown(self):        pass    def test_addtrackno_success(self):        '''成功_(批量)增加單號(狀態(tài)碼:0 保存成功)'''        '''獲取某賬號下的單號列表'''        result = self.trackno_result        '''獲取EXCEL表內(nèi)的單號'''        file = xlrd.open_workbook(r'C:\Users\xx\test_trackno.xlsx')        sheet = file.sheet_by_name('Sheet4')        cols = sheet.col_values(0)        n = len(cols)        '''去除重復(fù)單號,并post增加單號'''        index = 0        arylist=[]        for row in result:            a = re.findall('[a-zA-Z0-9]', str(row))            sj = ''.join(a)            arylist.append(sj)            index += 1        j = 0        for i in range(n):            if(j == 5):                break            if(cols[i] not in arylist):                if len(result)>= 40:                    break                else:                    j += 1                    data1 = {"Version": "1",                             "Method": "AddTrackNo",                             "Cookies": self.user_cookie,                             "SourceType": 0,                             "Param": {                                "TrackNos": [cols[i]]}                             }                    req1 = requests.post(self.buyer_url, json=data1, headers={"Content-Type": "application/Json"} )                    res = json.loads(req1.text)                    print(res)                    self.assertEqual(res['Code'], self.success)        #使用配置文件數(shù)據(jù)進(jìn)行斷言                    self.assertEqual(res['Json']['Items'][0]['ResultCode'], self.success)     #使用配置文件數(shù)據(jù)進(jìn)行斷言
  • 修改Run_Tests.py
import time, osimport syssys.path.append('./Interface')import Conf.config   #導(dǎo)入配置文件import unittestfrom HTMLTestRunner import HTMLTestRunnertest_dir = './Interface'file = unittest.defaultTestLoader.discover(test_dir, pattern='*_test.py')if __name__ == '__main__':    Conf.config.Config().get_conf()      #初始化配置文件    now = time.strftime("%Y-%m-%d %H-%M-%S", time.localtime(time.time()))    public_path = os.path.dirname(os.path.abspath(sys.argv[0]))    filename = public_path + "\\Report\\" + now + "report.html"    fp = open(filename, 'wb')    runner = HTMLTestRunner(stream=fp,                            title="接口自動化報告",                            description="詳細(xì)描述如下:"                            )    runner.run(file)    fp.close()
  • 接口自動化測試框架結(jié)構(gòu)

小伙伴們看到這么多亂糟糟的代碼肯定是已經(jīng)頭暈眼花,想馬上關(guān)閉頁面放棄治療了是吧哈哈下面本寶寶給大家列出了本次測試框架的結(jié)構(gòu),很清晰明了辣大家記得要在每個文件夾下加上init.py文件哦,不懂為什么要這么做的小伙伴,谷歌和百度搜搜搜就出來啦??!本寶寶腦力有限,就將就看看吧哈哈哈我不管啦!

Conf/  |-- init.py  |-- conf.ini   |-- config.pyInterface/   |-- init.py   |-- Common_Func.py.py   |-- Addtrackno_test.py Report/   |-- report.html init.pyRun_Tests.py 

總結(jié)

好啦,看到這個標(biāo)題,你就知道我想說什么啦~花了整整一天的時間去編寫這篇文章,還要擔(dān)心產(chǎn)品和開發(fā)過來找我定位問題,我可是冒著生命危險在給大家伙分享我的學(xué)習(xí)經(jīng)歷和成果呢??!

自己寫完也檢查好幾遍了,以我有限的腦力和胡言亂語,我完成了人生中第一篇博客分享這感覺就像是拱了一顆優(yōu)質(zhì)大白菜,哈哈哈哈哈

各路兄弟姐妹,很感謝你能看到這里,同時也特別希望你們可以給我提出意見,在測試的這條路上,我始終都是自己一個人瞎搞亂搞,搞出來的東西也沒人幫我檢驗(yàn)正誤,搞不出來的東西我也還是搞不出來~

但是好在我肯努力呀,肯學(xué)呀,不會就是不會,我從來不會掩飾自己的無知,但也不會賣弄自己的本事,其實(shí)就是沒本事賣弄而已

期待大家給與我的意見嗯!End

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

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

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