软件测试
文章平均质量分 92
主要介绍一些在软件测试过程中遇到的问题以及思考,可能会涉及到技术,也可能会涉及到管理,也可能会涉及到流程,方方面面的东西.....
lfdanding
这个作者很懒,什么都没留下…
展开
-
Android ADB常用命令
1、获取包名和Activity名字adb shell dumpsys window windows | grep mCurrentFocus也可以使用adb shell dumpsys activity top | grep ACTIVITY原创 2020-12-18 17:16:43 · 195 阅读 · 1 评论 -
IOS 13之后适配自定义window显示
今天在接入一个业务的时候,发现自定义的window不显示了,主要是因为ios13以后苹果增加了SceneDelegate进行管理窗口。以前的时候如果想要显示一个window,使用如下代码就行了window = [[NewMonkeyWindow alloc] initWithFrame:CGRectMake(0, 0, windowWidth, windowWidth)];window.hidden = false但是现在因为使用SceneDelegate管理window,必须将window注册到原创 2020-12-09 17:34:48 · 1129 阅读 · 0 评论 -
Genymotion Android 模拟器运行arm程序
最近在搞SDK自动化,交付过来的自动化只支持arm架构,Android自动的x86模拟器无法使用,使用Android自带的arm模拟器启动发现很慢,无法使用。只能使用第三方模拟器,搜索发现Genymotion是比较好用的一款模拟器。1、下载Genymotion模拟器首先是下载Genymotion模拟器,直接去官网根据自己的操作系统下载即可,https://www.genymotion.com/,下载安装后,如下图所示:2、安装Genymotion-ARM-TranslationGenymotion原创 2020-09-23 17:17:26 · 3224 阅读 · 0 评论 -
Android中获取指定包名下的所有类
准备开发一个测试框架,其中有一个问题是加载所有测试用例,需要利用java的反射机制加载继承了某个接口的测试用例,网上找了一圈,发现dexfile可以使用,代码如下所示 public static List<String > getAllClassName(){ List<String >classNameList=new ArrayList<String >(); try { DexFile df = new原创 2020-09-13 23:04:35 · 2186 阅读 · 0 评论 -
The style on this component requires your app theme to be Theme解决
今天要在Android端实现一个Navigation导航栏,代码需要通过LayoutInflater.from对BottomNavigationView进行初始化,但是总是报下面的错误,看了一下错误堆栈报了The style on this component requires your app theme to be Theme.AppCompat (or a descendant)这个错误 ┌─────────────────────────────────────────────────────原创 2020-08-17 21:13:33 · 1187 阅读 · 0 评论 -
Xcode输出: Message from debugger: Terminated due to signal 9
参考文章:1、https://my.oschina.net/u/2470593/blog/709608原创 2020-08-10 11:02:30 · 2095 阅读 · 0 评论 -
Android Studio引入Kotlin插件
Kotlin问世于2011年,直到近两年被JetBrains,Google等公司扶持下,才被逐渐重视起来。尤其是2017年5月份谷歌宣布把Kotlin作为Android的官方开发语言,紧接着10月份Android Studio3.0正式集成了Kotlin开发环境,11月份更完善的Kotlin1.2版正式发布。本文将介绍如何在Android Studio引入Kotlin。一、查看Kotlin版本打开Android Studio,选择 Android Studio ->Preferences->原创 2020-08-04 11:26:04 · 3299 阅读 · 0 评论 -
Android Studio开发SDK
Android Studio开发SDK过程很简单。File->New->NewModel,选择Android Library 就可以了参考文章1、https://blog.csdn.net/yushuangping/article/details/802504492、https://www.jianshu.com/p/c203f6afc06a原创 2020-07-31 11:36:03 · 208 阅读 · 0 评论 -
Android Studio报Could not GET xxx解决办法
今天在打开一个Android项目以后,sync gradle的过程中总是报Could not Get ‘https://mirrors.tencent.com/repository/maven/thirdparty-snapshots/com/android/tools/build/gradle/3.5.0/gradle-3.5.0.pom’ Enable Gradle ‘offline mode’ and sync projecturl打开这个链接https://mirrors.tencent.co原创 2020-07-21 14:37:29 · 3101 阅读 · 0 评论 -
go单元测试实践
最近在做go的单元测试,简单的梳理一下知识点1、框架选型goconvey+gomonkey应该是最好的组合方案,goconvey是作为外层框架,gomonkey可以为函数、方法等进行打桩。2、go monkey项目地址:https://github.com/agiledragon/gomonkeygomonkey 是 golang 的一款打桩框架,目标是让用户在单元测试中低成本的完成打桩,从而将精力聚焦于业务功能的开发。gomonkey 接口友好,功能强大,目前已被很多项目使用,用户遍及世界多个国原创 2020-06-02 20:17:01 · 940 阅读 · 0 评论 -
iOS LLDB调试
调试是开发程序的利器,在开发的过程中,掌握好的调试方法可以节省大量的时间,本文简单介绍一下iOS的LLDB调试expression命令在程序的运行过程中想要改变某个变量的值来改变程序的行为,express命令再适合不过了如上图所示,number本身传入的是11 ,但是通过expression命令expression number = 9将number赋值为9,达到改变程序的目的run命令调试的时候经常需要重新启动程序。但是如果重新Run程序,需要重新编译,非常浪费时间。可以在 lldb 中输入r原创 2020-05-27 19:46:35 · 266 阅读 · 0 评论 -
ios arm64汇编调试
最近在看 ios 的 inline hook,免不了需要了解一下 arm64 汇编的知识,以及如何通过xcode去查看和调试汇编代码。1、如果通过XCode查看汇编代码在调用处添加断点,然后依次选择Xcode菜单中的 Debug->Debug Workflow->Always Show Disassembly命令后,就直接以汇编代码呈现了:2、如何通过Xcode查看核心寄存器变...原创 2020-04-29 17:21:00 · 1014 阅读 · 0 评论 -
IOS出现Initializer element is not a compile-time constant 解决办法
今天在写hook代码的时候,出现了Initializer element is not a compile-time constant 这个错误,如下图所示:通过将 该文件的后缀 .m 改成 .mm 即可原创 2020-03-14 22:41:13 · 3305 阅读 · 0 评论 -
VNCoreMLModel 初始化报 [NSURL initFileURLWithPath:]: nil string parameter
参考这篇文章 http://www.demodashi.com/demo/11715.html主要是因为 VNCoreMLModel init 的时候 model文件没有找到,如下代码所示: MyCustomImageClassifier *model = [[MyCustomImageClassifier alloc] init] ; _coreMLModel = [VNCo...原创 2020-02-18 16:38:17 · 685 阅读 · 0 评论 -
WKWebView捕获JS Error 跨域解决
通过window.onerror捕获到js error以后,发现js error都是Script error,毫无参考价值,webkit源码查看可知,script资源加载的地方,是进行了同源策略判断的,如果是非同源资源,errorMessage就被写死了Script errorFile跨域漏洞UIWebView虽然已经被遗弃,但依然还有很多app继续使用,且最新版本的iOS也会兼容UIWeb...原创 2020-02-11 19:27:41 · 3144 阅读 · 0 评论 -
WKWebView捕获JS Error
WebView里面会经常发生JSError,但是很多开发者却并未考虑过收集 JavaScript 出错时抛出的异常信息。因为只要 JavaScript 异常后 App 不会崩溃,当没有发生过就好了。或许,在浏览器时代,让用户刷新下页面,可以解决异常问题。但是在移动 App 的 H5 页面,一但出现异常将导致程序无法正常运行,用户也不是那么容易可以通过刷新来解决问题的。try-catch 主动...原创 2020-02-11 11:26:02 · 2942 阅读 · 0 评论 -
图片分类器部署到Core ML
这篇文章是翻译官方IOS TuriCreate的图片分类器的使用。原文链接:部署到Core ML部署到Core ML借助Core ML框架,您可以使用机器学习模型对输入数据进行分类。 可以使用export_coreml函数导出Core ML格式的模型。model.export_coreml('MyCatDogClassifier.mlmodel')在Xcode中打开模型时,其外观如下所...原创 2020-02-05 18:30:57 · 508 阅读 · 0 评论 -
图片分类器是如何工作的?
这篇文章是翻译官方IOS TuriCreate的图片分类器的使用。原文链接:图片分类器如何工作的?图片分类器是如何工作的?深度学习是在机器学习世界中随处可见的一个短语。它似乎正在帮助我们取得巨大的突破,但深度学习是什么呢?它是一种具有多层非线性转换的模型,频繁的通过该模型学习数据的高层表达的一种方法。让我们花点时间分析一下最后一句话。学习数据的高层表达意味着深度学习模型将获取数据,例如图片的...原创 2020-02-05 19:33:23 · 887 阅读 · 0 评论 -
高级使用(图片分类)
这篇文章是翻译官方IOS TuriCreate的图片分类器的使用。原文链接:高级使用高级使用在本节中,我们将介绍图片分类器工具包中的一些高级选项,这些将使你可以执行更多操作。标注数据如果只有图片而没有相应的标签,你可以使用内置在image_classifier中的标注工具。其用法如下所示:import turicreate as tc# Use the example provid...原创 2020-02-05 16:18:16 · 474 阅读 · 0 评论 -
再谈IOS堆栈和还原
1、符号表是什么符号表就是指在Xcode项目编译后,在编译生成的二进制文件.app的同级目录下生成的同名的.dSYM文件。.dSYM文件其实是一个目录,在子目录中包含了一个16进制的保存函数地址映射信息的中转文件,所有Debug的symbols都在这个文件中(包括文件名、函数名、行号等),所以也称之为调试符号信息文件。一般地,Xcode项目每次编译后,都会生成一个新的.dSYM文件。因此,A...原创 2020-02-03 13:40:29 · 2052 阅读 · 0 评论 -
在Facebook iOS app中减少FOOMs
最近在看FOOM,翻译一下facebook的解决方案。原文链接在Facebook iOS app中减少FOOMs在Facebook iOS app中减少FOOMs在Facebook,我们致力于使我们的应用程序稳定、快速和可靠。我们一直在努力减少Facebook IOS应用中的崩溃次数,并提高其整体的可靠性。过去,大多数crash是由于程序错误引起的,并且它们总是带有可以定位错误的堆栈和一直...原创 2020-01-26 21:58:52 · 518 阅读 · 0 评论 -
IOS图片分类
这篇文章是翻译官方IOS TuriCreate的图片分类器的使用原文链接:图片分类图片分类图片分类器的目标是在给定目标图片的情况下,能识别出该图片的标签。深度学习最近被证明可以在这个具有挑战性的问题上获得令人难以置信的结果。然而,这个结果是以不断对模型进行调參和训练为代价的。这意味着一个人可能需要花费数月的时间来测试不同配置的模型,但时间太长的情况下,投入产出比就很低。但是,Turi Cre...原创 2020-02-05 19:33:56 · 712 阅读 · 0 评论 -
目标检测工作原理(翻译)
原文链接:目标检测工作原理目标检测工作原理长期以来,目标检测模型使用分离的机制进行定位(where)和分类(what)。这些模型称为两阶段检测器,效果也非常不错。但是,最近的工作已经将这两个步骤组合为一个深度学习模型,使模型成为了一个一阶段检测器。“You Only Look Once: Unified, Real-Time Object Detection” by Joseph Redm...原创 2020-01-12 16:55:46 · 744 阅读 · 0 评论 -
部署到Core ML(翻译)
原文链接:部署到Core ML部署到CoreML在Turi Create中创建的目标检测模型可以很容易的部署到Core ML在iOS12 和 macOS10.14(Turi Create 5)中部署模型使用Turi Create 5.0+ 、iOS12 和macOS10.14,你可以通过Vision Framework直接集成目标检测模型。你可以直接在Turi Create5中导出到Co...原创 2020-01-12 15:17:27 · 675 阅读 · 0 评论 -
高级使用(翻译)
原文链接:高级使用高级使用本小节会更详细的描述评估指标,以及如何使用Core ML将模型部署到iOS或macOS应用程序中。评估如果在创建模型之前保留了标注的数据,你可以使用它来定量评估模型。你可以通过拆分数据来执行评估。import turicreate as tctrain, val = data.random_split(0.8)model = tc.object_detec...原创 2020-01-12 11:37:19 · 318 阅读 · 0 评论 -
IG02数据准备(翻译)
原文链接:IG02数据准备在本节中,我们将向你展示如何下载公共可用的数据集并将其加载到SFrame中。这将使你可以自己尝试对象检测工具箱。为了使该数据集成为我们工具箱期望的输入格式,我们将依赖许多有用的SFrame函数。注意:请确保在Turi Create4.3或更高版本执行这些操作。我们将使用的数据集是INRIA Annotations for Graz-02 (IG02)[1][2]。我...原创 2020-01-11 21:58:21 · 335 阅读 · 0 评论 -
IOS目标检测(翻译)
原文链接:目标检测目标检测目标检测是在图片中对目标进行分类和定位。给定一幅图片,检测器会对目标进行预测,如下图所示:该模型是用来检测动物面部。并通过圈在目标周围的边界框对目标进行注释入门实例在该例子中,目标是预测图片中的汽车和自行车以及它们在图片中的位置(可以跳转到 数据准备 来了解怎么获取 ig02.sframe)import turicreate as tc# Load th...原创 2020-01-11 20:54:24 · 491 阅读 · 0 评论 -
no such file or directory @ realpath_rec xxx.xib
今天在帮助业务接入sdk的时候,报错了no such file or directory @ realpath_rec xxx.xib,如下图所示后面定位发现业务的podfile使用了cocoapods-binary插件,会使pod工程二进制化,直接以framework的形式存在,xib也被编译成了nib文件在上图我们也发现了NewMonkeyANRCell.nib,所以这个文件是存在的...原创 2020-01-11 11:33:50 · 1794 阅读 · 0 评论 -
xcode11新项目删除main.storyboard
今年的Xcode11无疑是近几年变化最大之一的一个版本了。我也在升级Xcode11后各种踩坑,爽到泪水止不住流啊。这里就来说说我这两天踩到的一个坑吧,就是用xcode11新建iOS项目后,想要删除默认的main.storyboard,使用自定义的window和controller的坑。具有一定经验的人想必都知道Xcode11之前,想要达到上面的目的步骤吧。首先就是选中工程文件选项,之后删除Ma...转载 2020-01-01 10:53:54 · 695 阅读 · 0 评论 -
UIAlertView使用dismissviewcontroller后无法响应触摸事件
最近一个app在使用monkey的过程中发现点击一段时间以后,无法响应触摸事件。经定位原因是UIAlertView出现后,直接使用dismissviewcontroller进行dismiss,就会导致这种情况,主要是因为UIAlertView dismiss以后,会生成一个_UIAlertControllerShimPresenterWindow覆盖在屏幕上方,导致无法响应触摸事件。ps:苹果在...原创 2019-12-26 22:08:50 · 651 阅读 · 0 评论 -
软件测试之SDK开发——[!] The 'Pods-XXX' target has frameworks with conflicting names: masonry.framework.
出现 The 'Pods-XXX' target has frameworks with conflicting names这个错误,是因为工程里同时pod了两个相同名字的framework,最简单的方式是只pod一个。但是这通常是理想情况。我的SDK依赖第三方动态库masonry.framework用来布局界面。直接依赖第三方库有一个好处就是不需要修改和维护第三方库。并且对于大多数情况都适用。...原创 2019-12-09 15:02:00 · 6305 阅读 · 0 评论 -
软件测试之SDK开发(ios)——Xcode编译报错 ibtool failed with exit code 255
今天用户反馈接入SDK出现xib编译出错,ibtool failed with exit code 255网上google一下,参考文章Xcode编译报错 ibtool failed with exit code 255,文章介绍说是因为 xib编译器工具引起的,高版本xcode编译过后,使用低版本xcode就很可能出现这个问题。我的Xcode版本是11.2.1,而用户的xcode版本示11...原创 2019-12-03 13:58:20 · 469 阅读 · 0 评论 -
软件测试之SDK开发(ios)——谈谈SDK制作成Framework
最近开始将SDK推广到公司的其他部门,用的都是pod接入,使用pod install命令一键安装,又方便又快捷。但是也有公司的合作方要接入,不能访问公司的内网,只能制作成Framework让他们直接导入到工程里接入。1、新建Framework工程2、添加所需文件3、添加所需依赖的第三方库4、暴露头文件5、设置运行目标运行就可以生成Framework了。然后把Framewor...原创 2019-12-03 13:44:57 · 341 阅读 · 0 评论 -
软件测试之SDK开发(ios)——谈谈RunLoop
最近在开发SDK的时候,用到了多线程技术,为了观察线程的状态,就要使用RunLoop。计算机处理任务有进程和线程的概念,而在iOS中一个App只能开启一个进程,但是线程可以开启多个。一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。当我们需要一个常驻线程,可以让线程在需要做事的时候忙起来,不需要的话就让线程休眠,可以这样做:do { //获取消息 //处理消息} ...原创 2019-11-20 22:54:22 · 207 阅读 · 0 评论 -
软件测试之SDK开发(ios)——一种通过inline hook 自定义C函数的方法
ios中存在动态链接和静态链接,而对于静态链接的符号,fishhook是无法进行hook的,原因请参考这篇文章软件测试之SDK开发(ios)——fishHook原理介绍下面介绍一种可以hook静态链接符号的方法。自定义c函数都是静态符号,例子如下int cfunc(int x,int y){ return x+y ;}inline hook已经有成熟的开源实现inline hoo...原创 2019-11-08 10:59:29 · 847 阅读 · 0 评论 -
软件测试之SDK开发(ios)——一种在iOS上利用C语言弱符号__attribute__ ((weak))进行hook的方法
因为ios中的系统C函数符号是利用懒加载的方式进行绑定,所以可以利用C语言弱符号__attribute__ ((weak))进行hook。自己试验过程中发现通过这种方式的hook和fishhook的效果一样。1、弱符号是什么?参考文章弱符号__attribute__((weak))若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局...原创 2019-11-07 15:39:04 · 613 阅读 · 0 评论 -
软件测试之SDK开发(ios)——一种可以在ios上监控new分配内存的方法
监控内存的方法之一就是hook malloc,监控其内存分配,但是fishhook无法hook new操作符,从而无法监控new的内存分配。接下来介绍一种可以监控new操作符的内存分配方法。1、查找new操作符的汇编实现首先在demo上打一个断点,如下图所示运行代码,会发现断点停留在如下位置可以发现new操作符的地址是 0x1047fa70c然后我们查看app在内存中的偏移地址,使用...原创 2019-11-07 14:02:44 · 564 阅读 · 0 评论 -
软件测试之SDK开发(ios)——fishhook不能hook动态库和framework之间的相互调用
fishhook利用ios的动态库符号延迟绑定机制进行hook,原理已经在软件测试之SDK开发(ios)——fishHook原理介绍介绍过了。但是这种延迟绑定机制仅有在可执行文件调用动态库或framework时才会发生。而动态库和framework之间的相互调用,在被加载时就确定了所有符号的地址,调用时是直接跳到相应的函数入口地址。我们以objc_msgSend为例进行查看。首先在MachOvi...原创 2019-11-06 21:28:06 · 1378 阅读 · 3 评论 -
软件测试之SDK开发(ios)——fishHook原理介绍
我们在做测试的时候,通常需要对app里面的某些方法进行hook。今天介绍一下fishHook的原理,从而说明fishHook的使用场景和局限性。fishhook中已经将原理介绍的很清楚,如下图所示:跟着箭头流程如下:1、通过懒加载表Lazy Symbol Pointers找到动态表Dynamic Symbol Table懒加载表Lazy Symbol Pointers与动态表Dynami...原创 2019-11-06 16:03:52 · 581 阅读 · 0 评论 -
软件测试之SDK开发(ios)——分类方法无法调用解决
今天在帮业务接入SDK的时候,发现调用NSObject分类的静态方法的时候,会必现crashunrecognized selector sent to instance,我通过如下代码打印了NSObject的选择器,果然没有该selector。 unsigned int count; Class metaClass = object_getClass([NSObject...原创 2019-10-31 14:29:34 · 907 阅读 · 0 评论