selenium Python 軟件測試框架:關鍵字驅動開源優化

selenium Python 軟件測試框架:關鍵字驅動開源優化

說明

最新的selenium3 python3的開源優化

使用

  • 關注後私信回覆框架獲取源碼

配置yamls下的config的url

url: https://testerhome.com/

命令運行

python runner.py
  • 或者修改start.test.bat中的路徑後,直接點擊運行

結果展示

日誌目錄

  • 文件夾:chrome_XXXXX,包含截圖

2018-04-29 23:28:09,357 - INFO - ---- test001_登錄失敗_div.container>ul>li:nth-child(2)_css_click_ ----2018-04-29 23:28:09,970 - INFO - ---- test001_登錄失敗_input-lg_class_name_send_keys_lose1 ----2018-04-29 23:28:10,066 - INFO - ---- test001_登錄失敗_user_password_id_send_keys_1231231232 ----2018-04-29 23:28:10,187 - INFO - ---- test001_登錄失敗_div.form-actions_css_click_ ----2018-04-29 23:28:10,784 - INFO - ---- test001_登錄失敗_div.alert-warning_css_ _ ----2018-04-29 23:28:10,785 - INFO - [CheckPoint_1]: testALoginFail_ : OK2018-04-29 23:28:36,116 - INFO - ---- test001_登錄_div.container>ul>li:nth-child(2)_css_click_ ----2018-04-29 23:29:41,881 - INFO - ---- test001_登錄_input-lg_class_name_send_keys_lose1 ----2018-04-29 23:30:16,331 - INFO - ---- test001_登錄_user_password_id_send_keys_1231231232 ----2018-04-29 23:30:16,433 - INFO - ---- test001_登錄_div.form-actions_css_click_ ----2018-04-29 23:31:02,425 - INFO - [CheckPoint_2]: testBLogin_==請檢查dropdown-avatar==: NG 
  • 實時日誌

testALoginFail (TestCase.HomeTest.HomeTest) ... ==操作步驟:div.container>ul>li:nth-child(2)_css_click_ ====操作步驟:input-lg_class_name_send_keys_lose1====操作步驟:user_password_id_send_keys_1231231232====操作步驟:div.form-actions_css_click_ ====操作步驟:div.alert-warning_css_ _ ====用例_登錄失敗檢查點成功==oktestBLogin (TestCase.HomeTest.HomeTest) ... ==操作步驟:div.container>ul>li:nth-child(2)_css_click_ ====操作步驟:input-lg_class_name_send_keys_lose====操作步驟:user_password_id_send_keys_XXXXX====操作步驟:div.form-actions_css_click_ ====操作步驟:dropdown-avatar_class_name_click_ ====操作步驟://ul[@class='dropdown-menu']/li/a[contains(text(),'lose')]_xpath_ _ ====用例_登錄檢查點成功==[{'caseName': 'testALoginFail', 'step': '點擊登錄\n輸入用戶名\n輸入密碼\n點擊登錄\n', 'info': '打開testerhome', 'title': '登錄失敗', 'checkStep': '錯誤的密碼登錄不成功\n', 'id': 'test001', 'msg': '', 'name': 'chrome', 'result': '通過'}]oktestHotTopic (TestCase.MyTest.MyTest) ... ==操作步驟:div.container>ul>li:nth-child(2)_css_click_ ====操作步驟:input-lg_class_name_send_keys_lose====操作步驟:user_password_id_send_keys_XXXX====操作步驟:div.form-actions_css_click_ ====操作步驟:dropdown-avatar_class_name_click_ ====操作步驟:dropdown-avatar_class_name_click_ ====操作步驟://ul[@class='dropdown-menu']/li/a_xpath_click_ ====操作步驟://ul[@class="list-group"]/li[1]/div/a[2]_xpath_get_text_ ====操作步驟:ul.list-group > li:nth-child(1) > div.title > a:nth-child(2)_css_click_ ====操作步驟:/html/head/title_xpath_get_text_ ====用例_熱門話題檢查點成功==

測試報告

selenium Python 軟件測試框架:關鍵字驅動開源優化

selenium Python 軟件測試框架:關鍵字驅動開源優化

代碼簡要分析

yml測試用例

testinfo: - id: test001 title: 登錄 info: 打開testerhometestcase: - element_info: div.container>ul>li:nth-child(2) find_type: css operate_type: click info: 點擊登錄 - element_info: input-lg find_type: class_name operate_type: send_keys msg: lose info: 輸入用戶名 - element_info: user_password find_type: id operate_type: send_keys msg: XXXXX info: 輸入密碼 - element_info: div.form-actions find_type: css operate_type: click info: 點擊登錄 - element_info: dropdown-avatar find_type: class_name operate_type: click info: 點擊圖像check: - element_info: //ul[@class='dropdown-menu']/li/a[contains(text(),'lose')] find_type: xpath check: default_check(默認可以不傳,就是簡單的查找頁面元素) info: 查找用戶名成功
  • 關於check下面可以填檢查點的類型:

  • CONTRARY = "contrary" # 相反檢查點,表示如果檢查元素存在就說明失敗,如刪除後,此元素依然存在

  • CONTRARY_GETVAL = "contrary_getval" # 檢查點關鍵字contrary_getval: 相反值檢查點,如果對比成功,說明失敗

  • DEFAULT_CHECK = "default_check" # 默認檢查點,就是查找頁面元素

  • COMPARE = "compare" # 歷史數據和實際數據對比

某個用例的page層

class LoginPage: def __init__(self, kwargs): _init = {"driver": kwargs["driver"], "test_msg": getYam(kwargs["path"]), "logTest": kwargs["logTest"], "caseName": kwargs["caseName"]} self.page = Pages.PagesObjects(_init) def operate(self): # 操作步驟 self.page.operate() def checkPoint(self): # 檢查點 self.page.checkPoint()
  • pages再次封裝了一層,主要使用了 setupclass+ self.driver.get重定位的方式

  • 避免用例依賴,並不會每個用例重新啟動一個session,重連機制也是這樣實現的(後續填坑)

 if kwargs.get("launch", "0") == "0": # 若為空, 刷新頁面 self.driver.get(self.driver.current_url)

testcase層調用page層

cclass HomeTest(ParametrizedTestCase): def testALoginFail(self): app = {"logTest": self.logTest, "driver": self.driver, "path": PATH("../Yamls/home/LoginFail.yaml"), "caseName": sys._getframe().f_code.co_name} page = LoginFailPage(app) page.operate() page.checkPoint() def testBLogin(self): app = {"logTest": self.logTest, "driver": self.driver, "path": PATH("../Yamls/home/Login.yaml"), "caseName": sys._getframe().f_code.co_name} page = LoginPage(app) page.operate() page.checkPoint()

封裝自己的關鍵字

  • 在BaseOperate中定義自己的關鍵字

 def operate_by(self, operate, testInfo, logTest): ........... elements = { be.CLICK: lambda: self.click(operate), be.GET_VALUE: lambda: self.get_value(operate), be.GET_TEXT: lambda: self.get_text(operate), be.SEND_KEYS: lambda: self.send_keys(operate), be.MOVE_TO_ELEMENT: lambda: self.move_to_element(operate) }
  • 在用例中yaml傳入自己的關鍵字即可,看看下面的operate_type中的鼠標懸停

testcase: - element_info: cate_item_108698 find_type: id operate_type: move_to_element info: 鼠標懸停到.net分類上

後續

  • 引入重連機制

  • docker grid


程序爬蟲抓取有用資源共享給大家

關注後,私信回覆【資料包】獲取如下內容,


分享到:


相關文章: