1. 程式人生 > 其它 >【優雅程式碼】02-自動化工具合集介紹

【優雅程式碼】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


抓包測試連結

https://movie.douban.com/j/search_subjects?type=movie&tag=熱門&sort=recommend&page_limit=20&page_start=20

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