【優雅程式碼】02-自動化工具合集介紹
【優雅程式碼】02-自動化工具合集介紹
歡迎關注b站賬號/公眾號【六邊形戰士夏寧】,一個要把各項指標拉滿的男人。該文章已在github目錄收錄。
螢幕前的大帥比和大漂亮如果有幫助到你的話請順手點個贊、加個收藏這對我真的很重要。別下次一定了,都不關注上哪下次一定。
1.背景介紹
在日常工作中總會需要重複的工作,而作為一個現代人,應該學會使用工具避免重複的工作。java能做很多事情不止是web方向,而如果不限於java能做的事情就更多了。
2.黑盒自動化
以下介紹的軟體基本以python為主,當然有些也可以用java編寫
平臺 | 軟體 |
---|---|
web | Selenuim |
Android | appium |
ios | xcode |
windows | pyautogui/AutoIt |
mac | pyautogui/AppleScript |
這裡以pyautogui作為介紹,因為其泛用性最廣,手機端也可以用模擬器配合這個東西跑,但是web和移動端並不如專門的那麼好用就是。如下程式演示了使用谷歌瀏覽器的必應查詢Hello world後擷取左上角微軟圖示文字同時進行輸出。
#!/usr/bin/env python # -*- coding: utf-8 -*- import subprocess import time import pyautogui from PIL import Image import pytesseract subprocess.Popen('C:\Program Files (x86)\Google\Chrome\Application\chrome.exe') time.sleep(1) # pip install pyautogui pyautogui.click(773, 326) pyautogui.typewrite('Hello world!\n') # pip install pillow time.sleep(1) # 截圖 x,y,寬,高 path = 'F:\螢幕截圖.png' im = pyautogui.screenshot(region=(42, 140, 100, 50)) im.save(path) # pip install pytesseract pytesseract.pytesseract.tesseract_cmd = r'D:\Tesseract\tesseract.exe' # https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.0.0-alpha.20200328.exe text = pytesseract.image_to_string(Image.open(path)) # 呼叫識別引擎識別 # 輸出 Microsoft Bing print(text.replace("\n", "").replace("\f", "")) print("finish")
整理一下邏輯就是對於定位一般性可以採用pyautogui的圖片定位(如果不行採用座標定位),如果需要擷取文字,能夠複製的就直接雙擊滑鼠選擇當行然後ctrl+c複製下來,再通過剪下板拿到資料,不能複製的就通過座標擷取圖片再用OCR獲取內容。以此為基礎基本可以滿足所有個人自動化需求了,寫個普通指令碼都不在話下。不吹不黑,靠這些東西筆者是真的寫過遊戲指令碼和交易指令碼。
4.黑盒抓包
抓包不只是在pc端最關鍵是它可以輔助在app上抓包,抓到未加密連線破解後配合黑盒自動化效果更佳。這裡僅介紹兩個代表,windows使用fiddler,mac使用charless
4.1fiddler
4.2charless
4.白盒測試工具
這裡僅介紹postman和jmeter,使用方式上jmeter要更加全面,支援更多的協議。postman作為http測試一直非常優秀,而jmeter在效能測試方面則非常優異,甚至是資料庫。
4.1postman
4.2jmeter
5.軟體打包轉為可執行程式
將自動化程式打包成軟體自動執行也是非常重要的一步,當你的自動化軟體日趨成熟就會有分享,甚至本身就是為了解決某個MM的問題,總不能給別人是bat檔案吧。桌面端推薦vue+electron進行打包核心邏輯可呼叫java。推薦這個主要是vscode、typora都是以electron進行研發的,並且中文文件很詳細。
最重要的一點:不要把語言學死了,主力開發肯定是以熟悉的語言為主,最需要掌握的是語言之間相互呼叫就可以完成很多看似很難的工作。
6.junit單元測試
6.1準備工作
注意scope是test,所以要在test目錄下才能生效
<!-- spring-test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
6.2註解執行流程
6.3建立單元測試
建立兩個一樣的類
public class MyJunit {
public void method1() {
}
public void method2() {
}
public void method3() {
}
public static void main(String[] args) {
}
}
public class MyJunit2 {
public void method1() {
}
public void method2() {
}
public void method3() {
}
public static void main(String[] args) {
}
}
ctrl+shift+t建立相應單元測試,並填寫assert方法
// 如果有需要執行springBoot容器填寫該註解
// @SpringBootTest
class MyJunitTest {
@Test
void method1() {
assertEquals(1, 1);
}
// 注意此處不相等會報錯
@Test
void method2() {
assertEquals(1, 2);
}
@Test
void method3() {
assertEquals(1, 1);
}
}
執行結果如下,每次都可以批量執行單元測試避免因為小改動改出某個bug