iOS:使用命令行在设备上进行UI测试!
Devากที่ได้รับหน้าที่เป็นMobile Dev.。 ฝั่งiOSก็ได้ทำCIบนJenkinsทั้ง单元测试และUi Testingผ่านFastlane…。 ก็สะดวกดี
runาคือหลายครั้งที่เมื่อrun ui testบนเครื่องjenkinsมันไม่เสถียร
iา ที่มั ผ่านบ้างแล้วแต่ดวง(พูดเล่นนะ) UiTestที่มันมากับ fastlane ui-testingเนี่ยโดย默认默认รันบน模拟器ที่ใช้ทรัพยากรของเครื่อื่
มีอมี工作ื่รๆนพร้อมกันก็ทำให้เครื่องช้า(Mac miniรันUi,单元测试ของทั้งAndroidและiOS)
iางทีมก็เริ่มอยากรันUi TestingบนDeviceเพราะเชื่อว่ามันจะดีกว่าที่รันผ่าน仿真器
และมันก็เป็นอย่างนั้นจริงๆราะโดยปกติ
UIา ที่รัน UI TestจะบนJenkinsด้วfastlane(simulator)ใช้เวลา〜20分钟 ีกอาจจะพังใช้เวลาหาสาเหตุอีก〜10分钟ลองรันบนเครื่องตัวเองอีก〜7分钟โถ่ววชีวิต
Device ล อลองรันบนDeviceกลับใช้เวลา〜8分钟แล้วTesterก็เห็นscreenของdeviceตอนrunด้วยดี้ดีย์
ขี้เกียจเล่าแล้วมาลองกันเถอะ…
สร้าง项目ง่ายๆเพื่อลอง
เหมือนทำแอพเปิดปิดอะไรสักอย่าง…
เมื่อเริ่มต้น应用
ให้状态เป็น关闭
วนไป上的และเมื่อกดปุ่มON / OFFให้状态เปลี่ยนไปเป็น…。
codeนcodeนั้นอยู่ด้านล่างจย้า
设置方案Ui测试设置项目ให้รันได้นDeviceได้นะครับ
provisionานการเพิ่มเครื่องเข้าไปใน供应配置文件เซ็ทApps IDให้โปรเจค
ส่วนนี้ค่อนข้างยาว
ViewController.swift
导入UIKit
类ViewController:UIViewController {
@IBOutlet弱var lightStatusLabel:UILabel!
@IBOutlet弱var lightSwitcherButton:UIButton!
var isLightOn = false
覆盖func viewDidLoad(){
super.viewDidLoad()
lightStatusLabel.text =“关闭”
isLightOn =假
lightSwitcherButton.setTitle(“ ON / OFF”,用于:.normal)
}
@IBAction func onTouchSwitcher(_ sender:UIButton){
推迟{
isLightOn =!isLightOn
}
如果isLightOn {
lightStatusLabel.text =“关闭”
}其他{
lightStatusLabel.text =“开启”
}
}
}
SampleUITests.swift
导入XCTest
class SampleUITests:XCTestCase {
func testSwitchLightStatus(){
让app = XCUIApplication()
app.launch()
让onOffButton = app.buttons [“ ON / OFF”]
//ก่อนเลย的เข้ามาให้เจอ状态
XCTAssertTrue(app.staticTexts [“ off”]。exists)
onOffButton.tap()//แตะ1ครั้งถ้วนเพื่อเปลี่ยน
XCTAssertTrue(app.staticTexts [“ on”]。exists)//ต้องเห็นon
onOffButton.tap()//แตะอีกครั้งก็ควรจะเห็นoffเนาะ
XCTAssertTrue(app.staticTexts [“ off”]。exists)
}
}
codeาiนบนก็ลองรันโดยใช้xcodeรUนUi Testบนscheme Ui Testsประมาณนี้
อรันผ่านsimก็จะประมาณนี้บนเครื่องก็เช่นกัน..
enามันอยู่บนเครื่องjenkinsหละ?? codeราคงไม่นั่งมาไล่กดxcodeเลือกschmeกดรันใช่ไหมใช่ไหม
งนที่สำคัญที่สุดของ博客นี้ก็คือบรรทัดนี้
uiนบรารันui测试บน设备โดยไม่ผ่านXcode GUI
enราสร้างjenkins工作เพื่อรันUiTestบนdeviceได้
xcodebuild
项目Project.xcodeproj
-方案“ SampleUITests”
-destination'platform = iOS,id = xxxxxxxaaaaxxxxxaaaaxxxxx'
测试
参数ก็ตามตัวเลย
专案-> xcode专案档案的路径/工作区ก็] -workspace xx.xcworkspace
scheme-> Schemeที่เซ็ทไว้เพื่อรันUiTests
目的地->กอก目标ของ设备/ idคือuuidของเครื่องที่จะรันUiTest
และมันก็รันหลายเครื่องพร้อมกันได้โคตรคูล!! หร้างฟาร์มได้เลยหรือจะแยก
ๆนกล่องๆ(工作)บนjenkinsก็ย่อมได้ใส่ยใส่目的地ไปอีก…
xcodebuild
项目Project.xcodeproj
-方案“ SampleUITests”
-destination'platform = iOS,id = {uuid设备#1}'
-destination'platform = iOS,id = {uuid设备#2}'
测试
iานี้ก็เป็นอันเสร็จสิ้นหวังว่าจะเป็นประโยชน์กับคนที่ทำUiTestนะครับ🍻
สรุป
- UiTest DeviceรDeviceใร็วกว่า模拟器ในบางกรณี(ต้องเป็นเครื่องที่เร็วอยู่แล้วด้วยนะอาจจะต้องclearเครื่องก่อน)แล้วก็ไม่กินเครื่องที่ไว้ทำCI
- scriptารรันผ่าน脚本ทำให้การรันบนDeviceง่ายขึ้นและทำหลายๆเครื่องพร้อมกันได้
谢谢:Chokchai Phatharamalai Joe Chavintron
- 完全防止iOS Web应用程序在移动版Safari中打开链接,即使链接包含参数
- 钥匙链警告“系统根”钥匙串不能被修改
- 为UITableView调用beginUpdates / endUpdates有什么好处,而不是这样做?
- 如何在UIScrollView中加载UIViewController
- 在与Cordova使用相机之后,会收到iOS内存警告
- 将可点击和固定的子视图添加到UITableViewController?
- IOS 7 UITextField resignFirstResponder BAD
- 在RTL语言中导航button的位置不正确
- Sprite Kit:更改DidBeginContact中的zRotation