迎接新的一波更新吧,這次是基于圖靈機(jī)器人的一個api接口的測試。

 這是api的接口:http://www.tuling123.com/openapi/api
 我們試著通過瀏覽器直接訪問看下平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

 這是反饋的結(jié)果,那么我們來看下圖靈機(jī)器人這邊給的接口文檔,http://www.tuling123.com/help/h_cent_webapi.jhtml?nav=doc這是文檔中心,這里的編寫很規(guī)范的,我們看到這個就很好知道我們想要用的接口,需要的東西,以及簡單的接口說明,我們可以從這里很快的得到我們想要的信息。

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

這里面詳細(xì)的給我們描述了需要的接口地址,包括請求格式和請求參數(shù),那么我們接下來,來分析下,

可見這個文檔給我們了請求地址,請求參數(shù)格式,那么我們接下來需要想想我們的思路,

理清我們要測試的目的,測試的思路,怎么去來寫這個測試用例,怎么組織我們想要的測試結(jié)果,盡量讓我們的測試更加全面,這里呢,

我的想法呢就是主要有一下, 測試api的url   測試請求方式   請求的參數(shù),返回結(jié)果。那么我們的斷言寫在哪里呢,我是把斷言用返回結(jié)果code加斷言,

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

這是我整個目錄

讓返回結(jié)果來看看api返回值是否正確,那么我來寫我的測試用例,在這里,我寫的測試用例是基于yaml的文件寫的,方便這里的讀寫,

post:
 post1:
   key: "aaaa"
   coneent: 'sasa'
   url: 'http://www.tuling123.com/openapi/api'
   fangshi: 'POST'
   code: "40001" #密碼錯誤
 post2:
   key: "dfeb1cc8125943d29764a2f2f5c33739"
   coneent: ''
   url: 'http://www.tuling123.com/openapi/api'
   fangshi: 'POST'
   code: "40002" #未輸入內(nèi)容
 post3:
   key: "dfeb1cc8125943d29764a2f2f5c33739"
   coneent: ''
   fangshi: 'POST'
   url: 'http://www.tuling123.com/openapi/api'
   code: "40007" #格式異常
 post4:
   key: "dfeb1cc8125943d29764a2f2f5c33739"
   coneent: 'sdsad'
   fangshi: 'POST'
   url: 'http://www.tuling123.com/openapi/api'
   code: "40004" #次數(shù)用完

 我的斷言就是這些code,

那么我們寫好測試用例了,下面就是來組織我們的腳本了。我喜歡吧一些我們經(jīng)常用的封裝起來,不管是框架也好,還是讓我用起來方便吧,我一般都是簡單的寫幾個函數(shù),這樣呢,在我接下來用的時候就特別方便了。我這里面呢使用的是第三方庫,理由很簡單,就是我們的第三方庫提供給我們很多便利, 我使用的是requests來做的,我們大家可以看下,教程 。      這是一個中文的教程,大家可以來試試,這里因為我是文章,就不給大家講解。大家可以看下詳細(xì)的文檔。接下來看下我封裝的,其實就是簡單的總結(jié)

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

# -*- coding: utf-8 -*-# @Author  : leiziimport requests,jsonclass reques():    def __init__(self):
        self.headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:51.0) Gecko/20100101 Firefox/51.0"}    def get(self, url):#get消息
        try:
            r = requests.get(url, headers=self.headers)
            r.encoding = 'UTF-8'
            json_response = json.loads(r.text)            return json_response        except Exception as e:            print('get請求出錯,出錯原因:%s'%e)            return {}    def post(self, url, params):#post消息
        data = json.dumps(params)        try:
            r =requests.post(url,params=params,headers=self.headers)
            json_response = json.loads(r.text)            return json_response        except Exception as e:            print('post請求出錯,原因:%s'%e)    def delfile(self,url,params):#刪除的請求
        try:
            del_word=requests.delete(url,params,headers=self.headers)
            json_response=json.loads(del_word.text)            return json_response        except Exception as e:            return {}            print('del請求出錯,原因:%s'%e)    def putfile(self,url,params):#put請求
        try:
            data=json.dumps(params)
            me=requests.put(url,data)
            json_response=json.loads(me.text)            return json_response        except Exception as e:            print('put請求出錯,原因:%s'%e)            return json_response

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

其實沒有怎么封裝吧,但是呢 還是給我提供了便利。 我封裝了幾個請求方式,這樣在接下來的使用中我可以直接使用了,我自己固定好的格式,給定的函數(shù)。

接下來就是來寫我們的用例了。這里我利用了yaml和 unittest來組織用例。yaml使用方法以及剖析。http://www.cnblogs.com/c9com/archive/2013/01/05/2845539.html

unittest詳細(xì)講解:http://www.cnblogs.com/yufeihlf/p/5707929.html

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

 fengzhuang.feng =u= open(r,,encoding= ==self.data[
    =self.post_data[][=self.post_data[][=self.post_data[][=self.post_data[][=self.post_data[][={:self.key, self.fangshi == =reques.post(url=self.url,params=],self.code,msg=(%(%=self.post_data[][=self.post_data[][=self.post_data[][=self.post_data[][=self.post_data[][={:self.key, self.fangshi == =reques.post(url=self.url,params=],self.code,msg=(%(%=self.post_data[][=self.post_data[][=self.post_data[][=self.post_data[][=self.post_data[][={:self.key, self.fangshi == =reques.post(url=self.url,params=],self.code,msg=(%(%=self.post_data[][=self.post_data[][=self.post_data[][=self.post_data[][=self.post_data[][={:self.key, self.fangshi == =reques.post(url=self.url,params=],self.code,msg=(%(%e)
if __name__ == '__main__':
    project_path=''
    suite = unittest.TestSuite()
    suite.addTest(Test_tuling("test_post4"))
    suite.addTest(Test_tuling('test_post3'))
    suite.addTest(Test_tuling('test_post2'))
    suite.addTest(Test_tuling('test_post1s'))
    temp=str(time.time())
    filedir=project_path+"//report//"+temp
    os.makedirs(filedir)
    filename="//pyresult.html"
    filepath=filedir+filename
    fp=file(filepath,'wb')# 調(diào)用HTMLtestrunner來執(zhí)行腳本并生成測試報告,html格式的
    runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='report',description='demo')
    runner.run(suite)

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

這是我寫的用例。那么大家可以看出來,我的寫法也是簡單的。就是一些簡單的使用。

這邊的測試報告我使用的是HTMLrunner。

詳細(xì)代碼:GitHub傳送門  

由于在后面在6的基礎(chǔ)上進(jìn)行了 優(yōu)化,git clone代碼后,使用下面命令

git checkout  5a9c6b041aa1b47e40df52d57727ae39f3e6319c

那么我們來看下最后的測試報告,

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

 

 最后我還寫了發(fā)送郵件的模塊,其中加的log模塊暫時還沒有用在代碼中。 后續(xù)的優(yōu)化,這樣,我就運行一下,然后最后給我發(fā)送測試報告,我不用盯著電腦了。

其實在這里,大家還可以加入多線程來跑腳本,這樣比較快。

其實大家都是為了走的更遠(yuǎn),做的更好。路在腳下,相信自己。

有疑問可以加我qq:952943386或者我的qq群194704520

也可以資助我下:

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

 

http://www.cnblogs.com/leiziv5/p/6679319.html