目录
虚竹哥最近跟一些技术大佬聊到国内软件测试方面的,虚竹哥把要点整理成文章,分享给大家。
现在国内软件行业90%还是处于手工测试的方式解决功能测试问题,软件测试行业属于低端劳动密集型行业。很多企业会与如中软国际、神州数码等外包公司合作,比如我国最大的软件公司每年需要的外包测试人员就高达26000多人。这无疑会带来很高的成本,对企业的管理能力也提出了更高的要求。
在这种情况下,自动化测试技术可以提供一种更有效、更高效的解决方案,减少劳动力成本,提高企业生产效率,并且可以提高测试质量,减少出现错误的可能性。
自动化测试技术是一种使用软件程序来执行测试,以检查软件的功能、性能和可靠性的技术。它可以减轻人力测试的负担,提高测试的准确性和可重复性,从而提高软件质量。
虚竹哥整理的痛点有如下几方面:
我的测试工作需要重复校验不同操作系统和不同芯片:从麒麟、统信、凝思到龙芯、兆芯、飞腾;
交付环节,测试工作压力大,但还需要整理很多的报告和文档;
工作太多,业务相对比较复杂,新加入的同事又无法快速上手测试工作;
我不想做功能回归,我只想做产品交付,这样能够更加体现我的价值;
市面上一些自动化测试工具的痛点:
录制测试用例,用例完整度低;
缺乏自动化工具,学习成本高;
回归测试量大,脚本编写维护成本高;
用例及报告可读性差;
特殊场景无法使用:例如银行账户、软件钱包、用户密码等黑屏录制问题
Selenium 是一款自动化测试工具,它可以帮助开发人员自动化地执行web应用程序的测试,以确保应用程序按照预期的方式运行。
Selenium 可以直接在浏览器中运行,支持浏览器包括Google Chrome、Mozilla Firefox、Internet Explorer、Safari和Opera等浏览器。
Selenium可以模拟浏览器活动,如点击、填写表单和检查页面元素。它还可以与测试框架,如JUnit和TestNG,集成,以便在组织和执行测试时提供更多功能。

优势:
Selenium 的优点是它可以跨浏览器,跨操作系统运行;
它的用户界面测试可以很容易地编写和维护;
它可以支持多种语言,包括 Java、C#、Python、Ruby、JavaScript 等;
它可以支持多种测试框架,如 JUnit、TestNG 等;
它可以支持各种浏览器,如 Chrome、Firefox、IE 等;
不足:
Selenium 的主要不足是它不能自动处理动态更新的网页内容,而且只能对网页进行限定性的测试。
学习难度比较高,需要花点时间好好的学学,没法做到立马就能上手,同时很多有用的功能也没有,比如:生成测试报告,并且浏览器兼容问题频发。
国内首创成功使用ARM(AI+Robot+Model技术)的TestOps云平台。
龙测AI-TestOps云平台提供了一系列全面的AI算法测试和优化解决方案,可以帮助企业实现AI产品的持续稳定性和可靠性,提高AI系统的性能和用户体验。
利用AI技术来帮助进行UI自动化测试,目前支持windows、Android、web和小程序。

标杆客户:
微信:节约原微信测试团队15人/天的人力成本;且已经由微信项目向游戏,语音板块延伸。
中国移动:已实现自动化用例覆盖60%以上。
等等,想看更多的,可以从这边去看--》
以上数据是龙测官方提供给虚竹哥的。
优势:
借助Selenium和appium的控件定位和OCR、OPENCV的视觉定位来录制UI元素,支持0代码、图形化,比较方便。AI是他们区别于其他家的最大优势,他们有自主AI模型,最新推出的视频AI转流程图,可以让使用者在手机上录制真实步骤后,就能AI转化出对应的测试用例。
不足:
在控件识别上会遇到控件位置变更和控件图案修改的情况,但是借助AI视觉识别能够继续达成想要的效果。同时,龙测的运行速度要稍微慢一点,可能正是因为需要借助AI识别图像的原因。
基于Node.js的端到端Web自动化测试框架,支持TypeScript或JavaScript来编写测试用例-运行用例-生成自动化测试报告。TestCafe兼容Windows、MacOS和Linux系统,同时也支持桌面、移动端浏览器,并且无需安装浏览器对应的WebDriver。

优势:
优点是在于它的易用性和灵活性。它可以节省时间,因为使用它可以自动执行重复的任务,而不需要人工干预。它还支持多种不同的测试框架,从而使开发人员更容易调试应用程序。
不足:
劣势就比较明显了,启动速度慢,开发语言也比较单一。
AI跟自动化测试结合的云平台,会产生什么化学反应,挺好奇的。下面我带大家去感受下龙测AI-TestOps云平台。

进入平台:
默认显示的是项目管理下,我的所有项目

应用管理:显示所有的应用。

设备管理:包含公有设备和私有设备,有电脑也有手机。


私有设备:

订单可以查看方案信息和设备时长。
个人版功能介绍:请看这边--》

也支持企业版和私有化部署,有兴趣可以请看这边--》
新建项目:支持多种项目类型:web应用,windows应用,linux应用,macos应用,android应用,IOS应用等。

也能从项目管理中,选择已创建的项目

进入项目内部

项目内部包含仪表盘,用例,测试计划,任务,数据,元素,配置,AI功能模块。
仪表盘:展示当前项目的相关数据统计情况

用例:包含流程图,积木图

任务包含实时任务,定时任务,兼容测试任务

数据包含全局变量和数据驱动表

元素:包含项目下的所有元素

配置:
配置和进行数据库环境配置

AI:录制了个视频,大家可直观感受到AI的魅力。通过视频自动生成流程图。


项目列表会出现“小虚竹测试”项目

点击进入项目详情

选择用例,录制流程图

开始录制第一条测试用例:选择公有设备,选择其中一台设备点击开始录制

开启录制:


保存流程图


选择任务:

选择流程:

选择用例:

选择设备:

任务配置:

任务执行情况:




查看任务报告:

每一步操作细节都会体现:





我们来回顾一下,本次分享介绍了什么自动化测试技术,国内软件测试行业中的痛点,并愉快地体验了龙测AI-TestOps云平台,简单容易上手,虚竹哥在无人指导的情况下,不需要编写脚本就能完成一次自动化测试,全程是UI可视化操作,很符合人员的操作习惯。从视频中感受到了AI介入自动化测试产生的震撼效果,这是一个划时代的创新,感谢跟我分享的几位技术大佬,也感谢龙测的数据支持,大家可自行体验下--》。
我是虚竹哥,我们下文见~
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel