來,一起做個測試小工具

  • 2019 年 10 月 6 日
  • 筆記

曾經我們測試組有幾十條甚至近百條的測試腳本,每次測試都在茫茫腳本海中尋求自己所需的那一個……

有一天,我們突發奇想,為什麼不給它們穿上「衣服」,讓它們「可視化」。

預覽

hello, hello, 不知道大家記不記得曾經的《小白的極簡介面「自動化」》那篇文章。文中用到的介面是這樣子的一個get請求

http://notify.mse.sogou.com/weather?city=天津

今天我們談一下它的進階,給這個極簡腳本「穿上衣服」,變成一個有介面的工具。

是不是已經不像是一個腳本了呢,可視化之後通用性更強了,甚至可以讓產品、運營等不懂程式碼、不會抓包的同學排查常用的用戶介面的問題。

腳本的可視化過程

No.1

準備腳本

這次我們要做的這個介面測試/驗證的腳本生成就不詳細說明了,通過Postman就可以生成一個。

小編經常折騰各種語言,對比C/C++、Java、Python這四個使用率最高的語言,在做介面上,Python可以說是最簡單的了。

所以本文也就用Python語言生成腳本,然後封裝成一個類。

# -*- coding: UTF-8 -*-  import requests    class WeatherTest:      def __init__(self):          self        def testWeather(self, city):          url = "http://notify.mse.sogou.com/weather"            querystring = {"city": city}            headers = {              'User-Agent': "PostmanRuntime/7.16.3",              'Accept': "*/*",              'Cache-Control': "no-cache",              'Postman-Token': "de3c837b-6f0c-48c8-a49d-1ca310c98917,d028ac2b-f12f-4fbd-ab4a-2aabfb32ab13",              'Host': "notify.mse.sogou.com",              'Accept-Encoding': "gzip, deflate",              'Cookie': "IPLOC=CN1100",              'Connection': "keep-alive",              'cache-control': "no-cache"              }            response = requests.request("GET", url, headers=headers, params=querystring)          print(response.text)

‍

No.2

「畫」介面

雖然Python用PyQt完成介面十分簡單,但是也依賴一些插件。

這裡我們需要安裝兩個插件Qt Designer和PyUIC。Qt Designer可實現拖拽控制項生成介面,避免了複雜的布局管理,而PyUIC可將Qt Designer拖拽生成的.ui文件轉化為.py文件。之後直接將轉化得到的.py文件引入到Projects裡面就可以了。

用Qt Designer,通過簡單的控制項拖拽就可以生成一個工具的小介面了

No.3

事件綁定

事件綁定的目的是將介面上的控制項和執行層面的方法結合起來。這樣就能做到點擊→觸發→輸出→展示的過程了。

0.介面初始化

目的:

A. 給下拉列表增加選項

B. 將輸出流重定向到文本區域

C. 指定按鈕事件對應的方法

   def __init__(self,):          super(MyWindow, self).__init__()          self.setupUi(self)          # 添加下拉列表選項          self.comboBox.addItem("北京")          self.comboBox.addItem("上海")          # 此處省略了部分item的添加code          # 重定向輸出流          sys.stdout = EmittingStr(textWritten=self.outputWritten)          sys.stderr = EmittingStr(textWritten=self.outputWritten)          # 綁定按鈕事件          self.pushButton.clicked.connect(self.buttClicked)

1.綁定按鈕事件 - 獲取參數&觸發請求

目的: 將腳本封裝的類中對外輸出的方法與按鈕的點擊事件綁定,即點擊按鈕觸髮腳本執行。

    def buttClicked(self):          test = WeatherTest()          selectedCity = self.comboBox.currentText()          test.testWeather(city=selectedCity)

2.重定向輸出流 - 展示在文本區域內

目的: 將輸入輸出流指向文本區域,並在文本區域添加滾動條。

  def outputWritten(self, text):          cursor = self.textBrowser.textCursor()          cursor.movePosition(QtGui.QTextCursor.End)          cursor.insertText(text)          self.textBrowser.setTextCursor(cursor)          self.textBrowser.ensureCursorVisible()

No.4

運行

運行程式之後,選擇一個城市,點擊按鈕就能看到介面請求的結果了~

到這裡,這個簡單的小腳本有了「衣服」,客戶端的測試同學們也可以輕鬆地看到一些看不到的服務端介面(如服務端系統和系統之間的介面)的詳細資訊。當然這個可視化的頁面還只能算是及格,它還能夠通過進一步擴展腳本、優化介面增添更多對這個介面不同層次的檢查點。

Ending

本文只是一個極簡「小教程」,測試工具、自動化腳本可遠遠不止於此。

小編想通過這篇文章分享一個思路: 用可視化的方法把常用的介面腳本、資料庫腳本甚至伺服器腳本封裝起來,開發成本並不高且能很大提高通用性和效率。

對於測試工具,小編做東西有兩個原則一是盡量通用和易擴展,另一個原則就是在力所能及之外多加至少1點。在沒有這1點的想法時,可視化介面就可以算是這額外的1點,多1點開發會方便更多人使用;多考慮至少1點,也督促自己每次都能在開發時學到新的東西。

PS. 對於介面的深入是很難的,學過Swing並用它寫過介面的人都吐槽又丑又難寫。但是,小編曾經看過一個介紹,JetBrains系列(Intellij IDEA, Pycharm, DataGrip)就是 Swing 開發的。

UI實現這個東西是門檻低,但是瓶頸也很高很長的。

Tags: