簡介
流程相關的介面,主要用 session 關聯,如果寫成函式(如上篇),s 引數每個函式都要帶,每個函式多個引數,這時候封裝成類會更方便。在這裡我們還是以部落格園為例,帶著小夥伴們實踐一下。
介面封裝大致流程
1、在介面測試中,有些介面經常會被用到比如登入的介面,這時候我們可以每個介面都封裝成一個方法,如:登入、儲存草稿、釋出隨筆、刪除隨筆,這四個介面就可以寫成四個方法
2、介面封裝好了後,後面我們寫用例那就直接呼叫封裝好的介面就行了,有些引數,可以引數化,如儲存草稿的 title 和 body 兩個引數是動態的。呼叫時直接將其傳入方法中,就可以了
3、像這種流程類的介面,後面的會依賴前面的,我們就可以通過 session將其關聯起來
4、將自動化測試指令碼儲存到 login.py檔案中,這樣就可以是指令碼和業務分離
實戰例項
第一步:在pycharm中左上角點選“file”,然後點選“New Project”,修改名字為“jiekou”,點選“Create”
第二步:在jiekou資料夾下,分別建立python package分別命名為“blog”和“case”
第三步:都完成後,如下
第四步:在login.py檔案中編輯自動化測試指令碼
用例匯入介面
1、匯入上面 login.py 模組寫的介面自動化測試指令碼
2、在test_01.py中編輯測試用例
參考程式碼
login.py檔案
1 # coding=utf-8 2 # 1.先設定編碼,utf-8可支援中英文,如上,一般放在第一行 3 4 # 2.註釋:包括記錄建立時間,建立人,專案名稱。 5 ''' 6 Created on 2019-5-15 7 @author: 北京-巨集哥 8 Project:學習和使用封裝與呼叫--流程類介面關聯 9 ''' 10 # 3.匯入模組 11 import requests 12 # 禁用安全請求警告 13 import urllib3 14 15 urllib3.disable_warnings() 16 import warnings 17 18 warnings.simplefilter("ignore", ResourceWarning) 19 20 21 class Blog(): 22 def __init__(self, s): 23 s = requests.session() # 全域性引數 24 self.s = s 25 26 def login(self): 27 '''登入介面''' 28 url = "https://passport.cnblogs.com/user/signin" 29 header = { # "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko / 20100101Firefox / 44.0", 30 # "Accept": "application/json, text/javascript, */*; q=0.01", 31 # "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 32 # "Accept-Encoding": "gzip, deflate, br", 33 # "Content-Type": "application/json; charset=utf-8", 34 # "VerificationToken": "xxx 已省略", 35 "Cookie": "xxx 已省略", 36 "X-Requested-With": "XMLHttpRequest", 37 # "Connection":"keep-alive", 38 # "Content-Length":"385" 39 } 40 json_data = {"input1": "賬號", 41 "input2": "密碼", 42 "remember": False} 43 res = self.s.post(url, headers=header, json=json_data, verify=False) 44 result1 = res.content # 位元組輸出 45 print 46 result1 47 return res.json() 48 49 def get_postid(self, r2_url): 50 '''正規表示式提取''' 51 import re 52 postid = re.findall(r"postid=(.+?)&", r2_url) 53 print(postid) # 這裡是 list [] 54 # 提取為字串 55 print(postid[0]) 56 return postid[0] 57 58 def del_tie(self, postid): 59 '''刪除帖子''' 60 del_json = {"postId": postid} 61 del_url = "https://i.cnblogs.com/post/delete" 62 r3 = self.s.post(del_url, json=del_json, verify=False) 63 print(r3.json()["isSuccess"]) 64 return r3.json() 65 66 67 if __name__ == "__main__": 68 s = requests.session() 69 Blog(s).login()
test_01.py
1 # coding=utf-8 2 # 1.先設定編碼,utf-8可支援中英文,如上,一般放在第一行 3 4 # 2.註釋:包括記錄建立時間,建立人,專案名稱。 5 ''' 6 Created on 2019-5-15 7 @author: 北京-巨集哥 8 Project:學習和使用封裝與呼叫--流程類介面關聯 9 ''' 10 # 3.匯入模組 11 import unittest 12 import requests 13 import warnings 14 from blog.login import Blog 15 16 17 class Test(unittest.TestCase): 18 def setUp(self): 19 warnings.simplefilter("ignore", ResourceWarning) 20 s = requests.session() 21 self.blog = Blog(s) 22 23 # def test_login_01(self): 24 # #self.blog.login() 25 # #print (result) 26 # #print (type(result)) 27 # # print (result["success"] )# 登入,獲取結果 28 # # self.assertEqual(result["success"] , True) # 拿結果斷言 29 def test_del_02(self): 30 # 第一步:登入 31 self.blog.login() 32 # 第二步:儲存 33 r2_url = self.blog.save(title="北京-巨集哥,流程類介面關聯", body="學習和使用封裝與呼叫--流程類介面關聯") 34 pid = self.blog.get_postid(r2_url) 35 # 第三步:刪除 36 result = self.blog.del_tie(pid) 37 print(result) 38 self.assertEqual(result["isSuccess"], True) 39 40 41 if __name__ == "__main__": 42 unittest.main()
小結
流程相關的介面的封裝和呼叫給各位小夥伴暫且介紹到這裡,因為部落格園的登陸機制改變,小夥伴們可以用jenkins的仿照這一篇實戰演練一下,下一篇我會帶你們一起做一下。
欲知後事發展,請聽下回分解!!