IOS6.1单元测试持续集成实践

简介:

最近项目 测试需要,调研并实践了下IOS下 单元测试工具和框架。目前比较流行的工具有xcode自带的OCUnit、GHUnit等,我选择的是GHUnit,因为相比OCUnit,GHUnit具有如下优势:
  1、开源框架
  2、支持重复测试、单一测试、集成测试。
  3、断言方法丰富
  4、支持持续集成
  5、测试类型多样(UI和Command Line)
  官方地址如下:http://gabriel.github.io/gh-unit/
  GitHub下载地址:https://github.com/gabriel/gh-unit
  下面我来讲下具体实现方法:
  一、测试准备
  1、xcode下载安装Command Line、测试的simulator
  2、若需要 手机调试,按http://www.apkbus.com/android-465-1.html中方法设置
  3、下载GHUnit框架,并在Example/MyTestable-iOS中提取GHUnitiOS.framework
   二、新建项目
  1.首先,创建一个名为 GHUnitTest 的Empty Application,注意:不要选中 Include Unit Tests和 Use Core Data
  2.添加新的  test target,点击右侧的 Add Target,新增一个名为Test 的 Empty Application,让其附属于GHUnitTest,注意:不要选中 Include Unit Tests 和 Use Core Data
  3.向 Test添加 GHUnitIOS Framework,右击工程中的 Frameworks,选中 Add Files to...菜单,选取 GHUnitIOS.framework,targets 要选择Test
  4.设置 Test的 Build Settings:在 Other Linker Flags 中增加两个 flag: -ObjC 和 -all_load
  5.删除 Test下的 AppDelegate.h 和 AppDelegate.m 两个文件,注意不是GHUnitTest下
  6.选择编译目标 Test>iPhone 6.1Simulator,编译运行,应该能得到如下效果。目前我们还没有编写任何实际测试,所以列表为空。
   三、编写测试代码
  1.向 Test 工程中添加的 Objective C class测试类,继承于GHTestCase,并编写对应的测试方法,以下是一个AccessTest.m完整的测试类
#import "Test-Prefix.pch"
@interface AccessTest : GHTestCase
@end
@implementation AccessTest
- (void)setUpClass{
GHTestLog(@"Test Starts");
}
- (void)tearDownClass{
GHTestLog(@"Test ends");
}
-(void)tearDown{
[NSThread sleepForTimeInterval:1];
}
- (void)testOne{
GHTestLog(@"app starts first");
}
-(void)testTwo{    [
GHTestLog(@"app starts sencond");
}
@end


 2.修改main.m代码,以支持测试结果导出及持续集成
int main(int argc, char *argv[])
{
int retval;
@autoreleasepool {
if(getenv("GHUNIT_CLT")){
retval = [GHTestRunner run];
}else{
retval = UIApplicationMain(argc, argv, nil, @"GHUnitIOSAppDelegate");
}
}
return retval;
}
  四、编译运行
  1.编译运行后如图:
  2.点击run,每个case都会跑过去结束后可点击任意一个case,可显示成功的日志或者失败的内容,如图
五、持续集成
  方式一:命令行测试
  1.设置build periodically
  2.添加shell脚本
  GHUNIT_CLT=1 WRITE_JUNIT_XML=1 GHUNIT_AUTORUN=1 xcodebuild -target Test -sdk iphonesimulator6.1 -configuration Debug build
  3.添加Public JUnit test result report:GHUnitTest/build/test-results/*.xml,其他设置看需求,保存
  4.点击立即构建,控制会打出测试的内容,具体内容就不截图了,看最后的结果吧
  5.test-result如图
   方式二:UI测试
  与一的区别在于shell脚本如下:
instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate appName -e UIASCRIPT absolute_path_to_the_test_file

最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
5月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
363 55
|
5月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
5月前
|
数据采集 存储 人工智能
从0到1:天猫AI测试用例生成的实践与突破
本文系统阐述了天猫技术团队在AI赋能测试领域的深度实践与探索,讲述了智能测试用例生成的落地路径。
从0到1:天猫AI测试用例生成的实践与突破
|
5月前
|
定位技术 开发工具 iOS开发
百宝箱开放平台 ✖️ iOS 集成说明
本文介绍百宝箱智能体与友盟+ iOS 应用集成方法,涵盖手动集成、权限配置、SDK 初始化、日志查看及效果验证。提供依赖库添加、Info.plist 权限声明、channel 规范、demo 工程下载与运行说明,助您快速完成接入。
288 1
|
6月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
377 6
|
运维 监控 安全
Cisco ISR 4000 Series IOS XE 17.18.1a ED 发布 - 思科 4000 系列集成服务路由器 IOS XE 系统软件
Cisco ISR 4000 Series IOS XE 17.18.1a ED - 思科 4000 系列集成服务路由器 IOS XE 系统软件
245 0
|
6月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
6月前
|
人工智能 自然语言处理 测试技术
AI测试平台的用例管理实践:写得清晰,管得高效,执行更智能
在测试过程中,用例分散、步骤模糊、回归测试效率低等问题常困扰团队。霍格沃兹测试开发学社推出的AI测试平台,打通“用例编写—集中管理—智能执行”全流程,提升测试效率与覆盖率。平台支持标准化用例编写、统一管理操作及智能执行,助力测试团队高效协作,释放更多精力优化测试策略。目前平台已开放内测,欢迎试用体验!
|
7月前
|
人工智能 资源调度 jenkins
精准化回归测试:大厂实践与技术落地解析
在高频迭代时代,全量回归测试成本高、效率低,常导致关键 bug 漏测。精准化测试通过代码变更影响分析,智能筛选高价值用例,显著提升测试效率与缺陷捕获率,实现降本增效。已被阿里、京东、腾讯等大厂成功落地,成为质量保障的新趋势。
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。