- 博客(38)
- 资源 (2)
- 收藏
- 关注
原创 Shell脚本学习
linux命令其实背后应该是一些C语言的代码,当我们在命令行中输入ls 这种命令的时候,其实是执行了一段C语言的代码, 这些内容是存储在bin目录下。shell是一种解释器,可以理解为包裹着操作系统的壳。当用户输入了一条Linux命令后,通过shell来进行解释。
2023-08-02 23:36:30
243
原创 Nginx反向代理和TSL原理
对称加密指的是加密和解密的方法逻辑是一致的,举个例子:密码12345通过每个数字增加10进行加密得到密文1112131415,解密的时候将密文减10就能得到明文密码了。非对称性加密则是相反的,加密的时候会产生公钥和私钥两种,明文密码使用公钥加密得到密文,解密的时候要使用私钥的方式获得,直接使用公钥是无法解密的,非对称性加密还能用来做身份认证,比如github,私钥加密的密文,可以使用存在GitHub网站的公钥进行解密,就能确认文件的更改是私钥的保管者,完成了认证。
2023-07-14 15:07:41
331
原创 移动端测试之自动遍历回归测试
AppCrawler 命令或者 java -jar appcrawler.jar 皆表示用 jar -jar 命 令执行对应版本的 jar 包文件,比如 java -jar appcrawler-2.4.0-jar-with- dependencies.jar。当系统功能比较复杂的情况下,没有合理的测试分层反而想要在UI测试上cover全部的流程,这本来就是错误的想法,大量的UI自动化测试不仅会增加不稳定性,得不到理想测试结果的同时也导致自动化测试收益比大打折扣。自动遍历的需求,可控:可以定义遍历的路径;
2023-07-11 19:45:00
215
原创 移动端测试之App自动化测试使用的常见命令行命令
terminal中输入.bash_profile,如果你是第一次配置环境变量,可以使用“touch .bash_profile” 创建一个.bash_profile的隐藏配置文件.如果你是为编辑已存在的配置文件,则使用"open -e .bash_profile”命令;安装完成后配置.bash_profile,如果是zsh则配置.zshrc,在文件结尾加上export ANDROID_HOME="/usr/local/opt/android-sdk”bin目录下存放JDK用于开发的一些终端命令工具。
2023-07-11 15:43:55
140
原创 移动端测试之app store和苹果证书体系
如果想要在真机上运行测试,则需要额外的一些配置,这是因为iOS对应用发布的要求比较严格,如果想把包安装在真机上的话,需要验证开发者签名信息才能完成。automationName:指定测试框架的名称,例如"XCUITest"。platformVersion:指定设备平台版本号,例如"14.5"。platformName:指定设备平台名称,iOS为"iOS"。deviceName:指定设备名称,例如"iPhone 12"。bundleId:指定要测试的应用程序的Bundle ID。
2023-07-11 14:18:23
151
原创 移动端测试之iOS测试工具体系
使用libimobiledevice可以在Mac OS X、Linux和Windows等操作系统上访问和管理iOS设备上的文件、应用程序、照片、音乐等数据,同时也可以进行应用程序的调试、安装和卸载等操作。Xcode提供了一个集成开发环境(IDE),包括代码编辑器、编译器、调试器、界面设计器等工具,可以帮助开发者快速、高效地开发应用程序。Instruments可以监控应用程序的CPU、内存、磁盘、网络、电量等方面的性能指标,并提供多种图表和工具,帮助开发者分析和优化应用程序的性能问题。
2023-07-11 11:09:43
335
原创 移动端测试之APP自动化测试框架 --- appium
Appium 提供了一系列 API 和工具,可以实现测试用例的编写、测试设备的管理、测试结果的记录和分析等功能,从而提高测试效率和测试质量。总的来说,Appium 是一款功能强大、灵活易用的自动化测试框架,可以帮助开发人员和测试人员快速、高效地测试移动应用程序的功能和界面,提高应用程序的质量和用户体验。可以使用该工具进行简单的用例录制,导出脚本的时候支持多种语言,java, python, js等。多种测试类型支持:Appium 支持多种测试类型,如功能测试、UI测试、性能测试等,可以满足不同测试需求。
2023-07-10 18:04:35
1215
原创 移动端测试之page object模式自动化测试
recommend_text_locator = (AppiumBy.XPATH, '//android.view.ViewGroup[@content-desc="推荐,6之2,''标签"]/android.widget.TextView')
2023-07-10 18:00:11
63
原创 移动端测试之测试框架封装改造
这里使用的是by ID的操作,我们可以通过日志发现其实是有个转化的过程的,UIautomator并不是直接使用ID = XX进行查找的,而是由 ["id","tv.danmaku.bili:id/agree","380fc8dc-7d2e-4426-b326-0a4b97c37cf8"]的形式转成了{"strategy":"id","selector":"tv.danmaku.bili:id/agree","context":"","multiple":false}这样的形式。
2023-07-10 17:48:56
72
原创 移动端测试之android自动化测试
Android NDK 提供了一组工具和库,可以帮助开发人员编写 C/C++ 代码,并将其编译为本机代码库,以便在 Android 应用程序中使用。怎么从native中切换到web呢?随着移动端应用的快速发展,涌现了很多除native外的其他应用,当然也出现了各种开发框架,如flutter和react native等,这些web框架改造成的框架可以实现将代码映射到native的相应功能上,得到了极大的便利,这样可以使用同一份代码编译为iOS和android的不同应用,节省了开发周期。
2023-07-10 17:38:28
154
原创 移动端测试之断言编写以及数据驱动
数据驱动测试(Data-driven test)是一种软件测试方法,其中测试数据以表格或电子表格格式存储。数据驱动测试允许测试人员输入一个单一的测试脚本,可以对表格中的所有测试数据执行测试,并期望在同一表格中的测试输出。它也被称为表驱动测试或参数化测试。尤其是针对于自动化测试,DDT几乎是所有自动化测试默认遵循的规范。当我们执行自动化测试的时候,都会遵照DDT的要求,尽量将测试中的可变数据抽象出来,变成单独的文件,这个文件的格式可以是csv、xslx,也可以是json、xml或者是database。
2023-07-10 11:23:29
111
原创 移动端测试之appium显示等待和隐式等待
sleep(时间/s) 它的原理就是线程等待,这个方法会强制休眠线程达到等待的效果。等待元素满足条件,而until_not就是等待元素不满足条件,这个判断条件是引入了from selenium.webdriver.support import expected_conditions,里面包含了丰富的判断条件,包括但是不限于标题、URL、元素可见性、元素是否被选中等。虽然sleep简单好用,但是如果整个测试中贯穿了这种粗暴的等待方式,那用例也会变得十分缓慢并且不够优雅,于是出现了隐式等待和显示等待。
2023-07-07 17:49:42
240
原创 移动端测试之appium Android toast识别
toast是Android系统的系统行为,一般情况下不会是某个app自己编写的。所以它本来是不属于应用的,也就不会出现在page source中,但是为了能更好的对它进行自动化操作,appium会监听捕获toast并把它塞到page source中。理论上只要是toast所在的xpath路径就可以,不管是//这里截取了一段toast实现的关键代码,可以看到toast有个关键的属性是class name,被设置成了com.android.settings所以建议使用。那么toast怎么定位呢?
2023-07-07 17:47:51
218
原创 移动端测试之appium滑动操作详解
'new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("目标按钮文本").instance(0));这里会自动向上或者向下滚动查找目标按钮,new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView这个方法是根据UIautomator的方法完成的。
2023-07-07 11:54:36
1530
原创 移动端测试之appium元素定位方法
Android View Matcher 是一种基于 ViewMatcher 的元素定位方式,可以通过元素的属性、文本内容、子元素等多个条件来定位元素。通过 Android Data Matcher 进行元素定位,Android Data Matcher 是一种基于数据匹配的元素定位方式,可以通过元素的属性值、文本内容、子元素等多个条件来定位元素。元素在页面中其实是一个树状结构,xpath就是元素的绝对位置,这种方式可以定位没有其他标识或者标识不唯一的元素,//*代表了全部,是xpath的语法。
2023-07-06 23:20:29
609
原创 移动端测试之兼容性测试
使用simulator可以安装不同版本的系统,Genymotion可以启动对应的设备,然后使用STF测试平台统一对设备进行管理,这样在有自动化测试的条件下,就能实现对多台设备的共同测试,大大提高效率,关于STF平台的搭建以及测试用例的分发也会在后续的文章中详细介绍。如果项目上没有数据收集,那么首先根据项目的技术栈,根据SDK这些信息排除一部分本来就无法支持的老旧机型设备,然后再根据市场上的数据进行分析,这里的市场指的是手机市场,找到市面上占有率比较高的产品及其型号进行针对性的测试。
2023-07-06 16:47:44
665
原创 移动端测试之自动化测试理论
最上面是UI测试,也就是我们理解的E2E测试,这部分是执行最慢的且成本最高。到了UI层更多是模拟用户操作执行的,开发过程中免不了UI变更频繁这就会导致测试要经常进行维护,同时又因为测试框架本身不够稳定,也会造成用例的执行结果不可靠,误报或者错报bug,这些因素都是UI测试成本提高的重要原因。当然自动化测试并不能完全取代手动测试,在实践中往往是采用两者相结合的方式,测试人员使用自动化测试工具提高测试效率释放自己用在回归测试的带宽,从而有更多的时间精力进行探索性测试,保障项目的质量。
2023-07-06 16:13:16
128
原创 一篇文章带你上手K6
K6是一个现代化的、开源的负载测试框架,可以帮助开发者和测试人员对Web应用程序、API以及微服务进行性能测试。K6基于JavaScript编写,简单易学,不需要额外的编程语言或工具。同时该框架社区生态也很好,有很多拓展可以根据需要灵活的进行选择。使用K6,用户可以创建自定义的性能测试脚本,模拟多种负载场景,包括并发用户数、请求速率、请求类型、网络带宽等,在真实的环境中对应用程序进行压力测试,发现问题并进行优化。
2023-07-05 22:54:29
1215
原创 移动端测试之性能测试
K6,这是grafana开源的性能测试框架,由go语言编写,如果只是做简单的性能测试,使用起来非常的方便,同时框架内对HTTP接口的支持很好,可以复用接口测试代码,一举多得,缺点是对插件的支持比较差,如果需要mock很多测试数据的话比较恼火。测试目的:性能测试的目的是性能测试中重要的一环,根据不同的目的可以得到不同的性能测试概念,如果是想要进行稳定性测试,那就需要在合理的数据量下持续进行测试。QPS一般记录的是前端查询的sql,不包含插入、更新、删除操作,显然这样的指标用来描述系统整体的性能是不够全面的。
2023-07-05 22:53:40
566
原创 移动端测试之功能测试篇
编写测试报告:根据测试结果,编写测试报告,并记录测试过程中出现的问题和建议。移动设备和操作系统多样性:移动设备和操作系统的多样性可能会导致应用程序在不同设备和系统上的行为不同。网络连接和异步操作:移动应用程序通常需要与云服务或者其他应用程序进行交互,因此需要测试网络连接和异步操作的稳定性和可靠性。安全性和隐私:移动应用程序通常需要处理用户的敏感信息,因此需要测试安全性和隐私保护的有效性和可靠性。国际化和本地化:移动应用程序可能需要支持多语言和多地区,因此需要测试国际化和本地化的兼容性和可靠性。
2023-07-05 17:41:26
132
原创 你真的了解appium吗?
这里使用的是by ID的操作,我们可以通过日志发现其实是有个转化的过程的,UIautomator并不是直接使用ID = XX进行查找的,而是由 ["id","tv.danmaku.bili:id/agree","380fc8dc-7d2e-4426-b326-0a4b97c37cf8"]的形式转成了{"strategy":"id","selector":"tv.danmaku.bili:id/agree","context":"","multiple":false}这样的形式。
2023-07-04 15:55:27
121
原创 web应用常见的攻击方式及解决办法
例如,攻击者可以在一个钓鱼网站中放置恶意链接,当用户点击该链接时,会跳转到 Web 应用程序中的某个页面,并自动执行恶意请求,而用户并不知情。包含本地文件:攻击者利用应用程序中的文件包含函数(如 PHP 的 include()、require() 函数等),来加载本地文件,例如配置文件、日志文件等,然后将恶意代码注入到这些文件中。包含远程文件:攻击者利用应用程序中的文件包含函数,来加载远程文件,例如攻击者自己搭建的 Web 服务器上的文件,然后将恶意代码注入到这些文件中。
2023-06-13 17:59:44
1110
原创 Cypress 进阶知识
当 Cypress 以交互模式启动时,会看到 Cypress 先运行在 localhost 上然后又切换到 URL 重新运行(多消耗了一部分时间),在 cypress.json 中设置 baseUrl ,这样不仅可以在运行时节省 Cypress 匹配被测应用程序 URl 的时间,还可以在编写待访问的 URL 时,忽略 baseUrl,直接写后面的路径。但是在Cypress中认为条件测试是不稳定的。测试本来就应该是有固定的期望结果的,这样不确定的条件测试可能在条件失效的时候导致测试的结果也不再可靠。
2023-05-16 15:02:21
522
1
原创 Cypress 基础知识学习
想要执行并行测试,首先要在CI上配置多台可用的虚拟机,cypress会把所有收集到的spec测试文件打包为一个spec list给到cypress cloud,cypress cloud有个balance strategy,可以收集分析执行的数据,这个数据通过运行时候的-- record命令得到,分析后会将合适的spec文件分给不同的机器运行。在测试一些比较复杂的系统或者复杂的业务逻辑的时候,总会出现一些test flaky,不稳定的测试会导致整个测试看上去都不健康,所以重试机制是必要的。
2023-05-16 15:01:24
1187
1
原创 redis和缓存服务
比较常见的解决缓存击穿的办法是使用互斥锁,简单的说就是在缓存失效的时候,不是立即去数据库加载数据,而是先设置互斥锁(例如:Redis中的setnx),只有设置互斥锁的操作成功的请求,才能执行查询从数据库中加载数据并写入缓存,其他设置互斥锁失败的请求,可以先执行一个短暂的休眠,然后尝试重新从缓存中获取数据,如果缓存还没有数据,则重复刚才的设置互斥锁的操作,大致的参考代码如下所示。当然,先更新数据库再删除缓存的做法在理论上也存在风险,但是发生问题的概率是极低的,所以不少的项目都使用了这种方式。
2023-05-16 14:52:01
127
原创 Django 0 - 1 搭建web 应用
Python的Web框架中,Django无疑是最有代表性的重量级选手,开发者可以基于Django快速的开发可靠的Web应用程序,因为它减少了Web开发中不必要的开销,对常用的设计和开发模式进行了封装,并对MVC架构(系统中的组件分为模型(Model)、视图(View)和控制器(Controller)三个部分并借此实现模型(数据)和视图(显示)的解耦合。在实际开发中是不会在cookie中保存用户的敏感信息(如用户的密码、信用卡的账号等)的,而且保存在cookie中的数据一般也会做好编码和签名的工作。
2023-05-16 14:51:31
79
原创 mysql数据库
在这个存储过程中,我定义了一个参数 transdate 的数据类型是 TEXT。这个参数的用处是告诉存储过程,我要处理的是哪一天的数据。我没有指定参数种类是 IN、OUT 或者 INOUT,这是因为在 MySQL 中,如果。
2023-03-27 14:08:52
84
原创 git learning notes
间隔的几个commit整理成一个 git rebase -i 最后一个commit id, 进入后编辑下顺序,将要合并的pick改成s。拉代码,这时候git会提示conflict,我们就需要人工的处理冲突,处理后需要保留更改使用。如何指定不需要git管理的文件 .gitignore。不同人修改了同一文件的同一区域如何处理 首先使用。不同人修改了同文件的不同区域怎么处理。比较暂存区和HEAD所含文件的差异。不同人修改了不同的文件如何处理。看看不同提交的指定文件的差异。比较工作区和暂存区的差异。
2023-03-27 14:07:32
61
原创 进程与线程
协程可以看作是一种用户态的线程,可以在一个线程中运行多个协程,从而实现并发处理。multiprocessing中的process方法,可以创建一个进程,一般进程中的通信使用管道或者套接字进行通信。线程间的通信相对进程间会简单很多,同一个线程间的不同进程是可以实现内存共享通信的。线程是进程的一部分,它是计算机中可以独立执行的一组指令。线程可以共享进程的资源,例如内存和文件句柄,这使得它们之间的通信更加容易。通过使用生成器,可以实现一个可以暂停和恢复的函数,从而实现协程的效果。在主程序中,我们通过。
2023-03-01 16:55:05
114
原创 Selenium 自动化测试如何优雅的解决图片验证码问题
说到自动化测试那一定避不开登陆注册页面,而大多数情况下这两个简单的页面都存在一个小困难就是验证码,以前我的解决办法都是在测试环境粗暴的写死一个万能验证码,或者给程序一个10秒钟的线程阻塞,手动输入验证码以跳过这个步骤。这个问题我有跟其他同事简单的讨论过,一种观点是当AI库的识别能力可以达到一个较高的准确程度的前提下,自动化测试就应该包含验证码登陆,毕竟E2E测试就是应该更加贴近真实的用户操作。这两种方法的本质是相同的,都是使用AI的方式,自动识别验证码,完成填入。只不过采用了不同的包和方法完成的。
2023-02-24 14:03:50
2327
1
原创 自动化测试套件以及配置文件抽象
"build": "export RCT_NO_LAUNCH_PACKAGER=true && xcodebuild -workspace ios/example.xcworkspace -UseNewBuildSystem=NO -scheme example -configuration Release -sdk iphonesimulator -derivedDataPath ios/build -quiet" //build的语法,包含build的xc workspace以及应用的相关信息。
2023-02-24 11:12:13
258
原创 Git submodlue
如果将代码复制到自己的项目中,那么你做的任何自定义修改都会使合并上游的改动变得困难。从协作者的视角看,当有人在主项目和子模块中进行更改后,协作者本地已经有了main project,这时候只执行git pull拉到的代码只是最新的主仓库的代码,虽然git pull 通过递归可以找到子模块的提交但是需要手动执行。在项目中使用子模块的最简模型,就是只使用子项目并不时地获取更新,而并不在你的检出中进行任何更改。执行git clone的时候默认会包含子模块的目录,但是目录中没有任何文件,需要执行。
2023-02-24 11:08:44
108
原创 测试框架的学习
类中不能含有init方法,类和测试的命名方法中要包含test,运行的时候如果没有在编译器中指定testrunner为pytest的话,就需要设定main方法,然后执行pytest.main(),这时候loader会在整个项目路径下找到符合命名规范的用例进行执行,当然也可以指定文件查找,或者使用参数执行main方法使得输出中含有日志或者其他信息。pytest.param(1, 2, 3, id="(a+b):pass"), # id的值可以自定义, 只要方便理解每个用例是干什么的即可。
2023-02-24 11:08:28
147
转载 神奇的算法#include<algorithm>
#include<algorithm>函数用法:==adjacent_find==查找两个相邻(Adjacent)的等价(Identical)元素==all_of== 检测在给定范围中是否所有元素都满足给定的条件==any_of== 检测在给定范围中是否存在元素满足给定条件==count== 返回值等价于给定值的元素的个数==count_if== 返回值满足给定条件的元素的个数==eq...
2018-07-12 11:57:20
1618
转载 string模板类下的getline()函数
getline是string模板类下的一个函数,功能是读取证行的语句其原型为istream& getline ( istream &is , string &str , char delim );其中 istream &is表示一个输入流,譬如cin;string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);c...
2018-07-12 11:32:06
2081
原创 string模板类的find函数的使用说明
C++函数库中的find函数是string模板类的find()系列搜索函数例: string longer ("That is a funny hat."); string shorter("hat"); size_type loc1=longer.find(shorter); size_type loc2=shorter.find(shorter,loc1+1)...
2018-07-10 22:55:31
214
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人