簡介
流程相關的介面,主要用 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 = "http://localhost:8080/jenkins/j_acegi_security_check" 29 headers = { 30 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0" 31 } # get方法其它加個ser-Agent就可以了 32 d = {"j_username": "admin", 33 "j_password": "111111", 34 "from": "", 35 "Submit": u"登入", 36 "remember_me": "on" 37 } 38 39 s = requests.session() 40 r = s.post(url, headers=headers, data=d) 41 # print (r.content.decode('utf-8')) 42 # 正規表示式提取賬號和登入按鈕 43 import re 44 t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8')) # 用python3的這裡r.content需要解碼 45 print(t[0]) 46 print(t[1]) 47 48 def get_postid(self, r2_url): 49 '''正規表示式提取''' 50 import re 51 postid = re.findall(r"postid=(.+?)&", r2_url) 52 print(postid) # 這裡是 list [] 53 # 提取為字串 54 print(postid[0]) 55 return postid[0] 56 57 def save(self, title, body): 58 '''儲存草稿箱: 59 引數 1:title # 標題 60 引數 2:body # 中文''' 61 url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1" 62 d = {"__VIEWSTATE": "", 63 "__VIEWSTATEGENERATOR": "FE27D343", 64 "Editor$Edit$txbTitle": title, 65 "Editor$Edit$EditorBody": "<p>%s</p>" % body, 66 "Editor$Edit$Advanced$ckbPublished": "on", 67 "Editor$Edit$Advanced$chkDisplayHomePage": "on", 68 "Editor$Edit$Advanced$chkComments": "on", 69 "Editor$Edit$Advanced$chkMainSyndication": "on", 70 "Editor$Edit$lkbDraft": "存為草稿", 71 } 72 r2 = self.s.post(url2, data=d, verify=False) # 儲存草稿箱 73 print(r2.url) 74 return r2.url 75 76 def del_tie(self, postid): 77 '''刪除帖子''' 78 del_json = {"postId": postid} 79 del_url = "https://i.cnblogs.com/post/delete" 80 r3 = self.s.post(del_url, json=del_json, verify=False) 81 print(r3.json()["isSuccess"]) 82 return r3.json() 83 84 85 if __name__ == "__main__": 86 s = requests.session() 87 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的仿照這一篇實戰演練一下,下一篇我會帶你們一起做一下。
欲知後事發展,請聽下回分解!!