自动化测试框架搭建步骤教程

ops/2024/12/22 18:39:16/

说起自动化测试,我想大家都会有个疑问,要不要做自动化测试? 自动化测试给我们带来的收益是否会超出在建设时所投入的成本,这个嘛别说是我,即便是高手也很难回答,自动化测试的初衷是美好的,而测试工程师往往在实现过程中花费了很多成本、精力,而最终以失败告终。 失败的原因会很多,我总结几项:

1.    太过依赖测试工具,高估了工具的力量,最终会以失望告终。

2.     项目紧急的情况,为了规避那些多余的环节,干脆人工测试,结果整个链路中断。

3.     研发和测试人员不能很好的交互,如果这两个角色之间有了一道防火墙,那别说自动化测试了,手工测试也不会有好的效果。测试人员可以把研发想象成自己的女朋友, 努力培养相互之间的感情。

4.     自动化测试人员实力被低估而导致的情绪低落,这个问题在所有岗位上都会发生,当然要看领导重视程度了。

5.     资源不够,公司不舍得资源投入,或者蹑手蹑脚,那就不要浪费时间了。

6.     太高的期望,过低的回报。

现在国内没有几家公司说能玩转自动化测试的,在看国外那些耳熟能详的企业像google ,Microsoft ,它们反而搞得热火朝天的。可笑的是在微软中国的测试部门工作过几年的测试经理,出来搞个什么《微软自动化测试体系最佳实践课程》,就能忽悠国内的那些知名的企业掏钱去听,我这也不是说他们的东西不好, 只是希望我们自己也能够重视起来,要知道人家“卓越”体系也是由那些“专业团队”花了很多的时间和精力才搭建起来的,所以先不说收益如何,即便是为了这一个美好的初衷,我们也应该去尝试一下,即使是失败。

我也做了几年的测试,但也是最近才开始研究自动化测试的,在工作中多多少少接触过几种常见的工具,如 silktest 和Selenium ,搞过测试的应该都听过,我最近刚刚为现有项目搭建了一个测试框架,为其中的部分模块编写了一些测试case, 收益还是颇丰的,先说说这两种工具吧。

SilkTest 是商业工具,想使用是需要花钱的,但是有现成的平台和框架,也比较容易学习,可以基于windows ,unix 平台。ie ,firefox (部分)浏览器。可以录制回放,对象识别或者手工编程,也能基于数据驱动,关键字驱动等等测试框架。SilkTest 里面的语言4test 其实是类C (也有Silk4J ,用Java 写),编程能力相对较强。

Selenium 是免费的,需要有类似ide (如eclipse ),原先是thoughtworks 的几个牛人开发的,现在google 维护(人都跳槽过去了)。可以基于windows ,unix ,mac 等平台。ie ,firefox 等浏览器。 测试团队,经费不足,能力很强(Java 上面),有对测试平台和环境要求比较高(ie ,firefox ,safari 等等),那么Selenium 是很不错的选择。

一、工具准备

二、Junit的安装

1.        Eclipse本身会自带Junit.jar包,所一般情况下是不需要额外下载junit的。

2.        将junit3的library添加到工程的buildPath中

3.        因为junit的日志是通过Ant来生成的,所以一定要将Junit.jar添加到ant_home里

三、selenium的安装

1.        安装seleniumIDE,打开火狐浏览器,然后进入工具—>添加附件,搜索seleniumIDE

2.        查询出对应的IDE后,点击直接安装,安装结束后重启FireFox,看到下面的菜单说明安装成功

3.        安装selenium-rc,先去http://www.openqa.org/selenium/下载selenium包。用命令行来到解压到文件夹下:d:/autoTesting/selenium-server-standalone-2.0b1.jar目录下

4.        运行java -jar selenium-server-standalone-2.0b1.jar,启动selenium server。为了在运行时应用运行的浏览器与selenium服务的浏览器分开可在其后面加–multiWindow。

5.        在Eclipse创建一个项目,在项目的build path里面加上elenium-server-1.0-beta-1下selenium-server.jar、selenium-java-client-driver-1.0-beta-1下selenium-java-client-driver.jar(这两个在刚解压的包里面)和eclipse/plugins/org.junit_3.8.1下junit.jar。

6.        将制定的Jar包导入到工程里,然后你就可以集成并使用相应的API,编写自己的测试CASE了。

四、Coverlipse的安装

1.        直接通过Eclipse即可安装,步骤如下

In Eclipse, click Help -> Software Updates -> Find and Install.
In the dialog, select Search for new features to install, then Next.
In the next step, add a New Remote Site. Name it "Coverlipse update site", the URL is "http://coverlipse.sf.net/update/".
Press Finish. Eclipse now searches for the Coverlipse feature to install and shows that to you.
2.        配置Coverlipse以获取代码覆盖

3.        一旦单击了Run,Eclipse会运行Coverlipse并在源代码(如图7所示)中嵌入标记,该标记显示了具有相关JUnit测试的代码部分

4.    Coverlipse生成的具有嵌入类标记的报告

5.     正如您所见,使用Coverlipse Eclipse插件可以更快地确定代码覆盖率。例如,这种实时数据功能有助于在将代码签入CM系统前更好地进行测试。

五、ANT安装,eclipse自带,只需要配置环境变量ant_home即可。
六、创建一个案例

1.        创建一个工程testSelenium安装下面目录结构

2.        录制脚本,打开Firefox浏览器,进入selenium IDE菜单

3.        输入相应录制的地址,点击红色按钮,开始录制

4.        将脚本转换成junit代码,然后将其拷贝到测试类中做为测试CASE编码的雏形。

七、如何查看日志,这里日志分两类:

 Junit日志,通过junit写的断言,和标准输出,这些操作产生的日志记录。

l         Selenium日志,当运行junit脚本时,selenium相关的脚本就会产生回放日志,例如打开界面的url,标准输入,输出等信息。

   虽然这两种日志没有交集,需要分开查看。但一般情况下我们只需要观察Selenium日志已经足够用了,与其相比Junit日志更适用于编码阶段。

1.      Junit日志,只需要配置脚本build-selenium.xml,如下

 
  1. <project name="seleniumTest"default="junit" basedir=".">

  2. <propertyenvironment="env" />

  3. <conditionproperty="ia.home" value="${env.IA_HOME}">

  4. <issetproperty="env.IA_HOME" />

  5. </condition>

  6. <propertyname="run.classpath" value="../class">

  7. </property>

  8. <propertyname="run.srcpath" value="../testSelenium">

  9. </property>

  10. <propertyname="test.xml" value="../xml">

  11. </property>

  12. <propertyname="test.report" value="../report">

  13. </property>

  14. <propertyname="lib.dir" value="../lib" />

  15. <pathid="compile.path">

  16. <filesetdir="${lib.dir}">

  17. <includename="junit.jar" />

  18. <includename="ant.jar" />

  19. </fileset>

  20. </path>

  21. <targetname="init">

  22. <deletedir="${run.classpath}" />

  23. <mkdirdir="${run.classpath}" />

  24. <deletedir="${test.report}" />

  25. <mkdirdir="${test.report}" />

  26. <deletedir="${test.xml}" />

  27. <mkdirdir="${test.xml}" />

  28. </target>

  29. <targetname="compile" depends="init">

  30. <javacdestdir="${run.classpath}" srcdir="${run.srcpath}" />

  31. </target>

  32. <targetname="junit" depends="compile">

  33. <junitprintsummary="false">

  34. <classpathpath="${run.classpath}">

  35. <pathrefid="compile.path" />

  36. </classpath>

  37. <formattertype="xml" />

  38. <batchtesttodir="${test.xml}">

  39. <filesetdir="${run.classpath}">

  40. <includename="**/Test*.class" />

  41. <includename="**/*Test.class" />

  42. </fileset>

  43. </batchtest>

  44. </junit>

  45. <junitreporttodir="${test.xml}">

  46. <filesetdir="${test.xml}">

  47. <includename="TEST-*.xml" />

  48. </fileset>

  49. <reportformat="frames" todir="${test.report}" />

  50. </junitreport>

  51. </target>

  52. </project>

2.      运行ant脚本以后,就可以生成相应的junit日志。

selenium日志
当运行junit脚本时,selenium相关的脚本就会产生回放日志,但默认记录的东西可读性太差了,所以我们使用loggingSelenium(http://loggingselenium.sourceforge.net/usage.html) ,可以将每个case可以生成记录selenium命令的html格式的result了。

4.      plugin的下载地址:

Download logging-selenium-1.2.jar (LoggingSelenium)

5.      安装方法:只需要将下载的logging-selenium-1.2.jar导入到工程里即可。

6.      编写代码如下

  1. @Before

  2. public void setUp() {

  3. finalString resultPath ="absolute-path-to-where-your-result-will-be-written";

  4. finalString resultHtmlFileName = resultPath + File.separator +"result.html";

  5. finalString resultEncoding = "UTF-8"

  6. loggingWriter = LoggingUtils.createWriter(resultHtmlFileName,resultEncoding);

  7. LoggingResultsFormatter htmlFormatter =

  8. newHtmlResultFormatter(loggingWriter, resultEncoding);

  9. htmlFormatter.setScreenShotBaseUri(""); // this is for linkingto the screenshots

  10. htmlFormatter.setAutomaticScreenshotPath(resultPath);

  11. // wrapHttpCommandProcessor from remote-control

  12. LoggingCommandProcessor myProcessor =

  13. new LoggingCommandProcessor(newHttpCommandProcessor(your-configs), htmlFormatter);

  14. selenium= new LoggingDefaultSelenium(myProcessor);

  15. selenium.start();

  16. }

  17. @After

  18. public void tearDown() {

  19. selenium.stop();

  20. try {

  21. if(null != loggingWriter) {

  22. loggingWriter.close();

  23. }

  24. } catch(IOException e) {

  25. //do nothing

  26. }

  27. }

7.      运行成功以后在指定的目录中生成相应的reports

八、框架优势

1.      记录测试的过程,所见即是所得,selenium的所有内部程序都是用Javascipt编写的,比较灵活;

2.      可以通过selenium IDE录制脚本,脚本可以回放,可以作为junit编码的雏形;

3.      支持多种操作系统;

4.      支持多种编码语言。JAVA,.NET, Perl,Python, Ruby

八、框架劣势

1.    selenium的录制工具只能安装在firefox浏览器上, 如果系统界面不被firefox支持,那就要花费一定的时间去手写case。 不过最近听说有一个工具叫360WebTester ,可以支持IE的录制,而且是国产的评价还不错,有时间我要研究一下。

 

最后:

为了助力软件测试员朋友们跳槽面试、升职加薪、职业困境,提高自己的技术,本文给大家整了一套涵盖测试所有技术栈的快速学习方法和笔记。目前已经收到了上百人网友的反馈,说是面试问到了很多这里面的知识点。

内容包含了:测试理论、Linux基础、MySQL基础、Web测试、接口测试、App测试、管理工具、Python基础、Selenium相关、性能测试、LordRunner相关等,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

通过大数据总结发现,其实软件测试岗的面试都是差不多的。常问的有下面这几块知识点:

 测试理论(测试基础+需求分析+测试模型+测试计划+测试策略+测试案例等等)
 Linux( Linux基础+Linux练习题)
 MySQL(基础知识+查询练习+万年学生表经典面试题汇总+数据库企业真题)
 Web测试
 API测试
 App测试
 管理工具
 Python基础(Python基础+编程题+集合+函数+Python特性等等)
 Selenium相关
 性能测试
 LordRunner相关
 计算机网络
 组成原理
 数据结构与算法
 逻辑题
 人力资源
一、软件测试基础
软件测试的步骤是什么?
如何录制测试脚本?
应该考虑进行如何测试的测试方法
怎样估计测试工作量?
测试设计的问题
当测试过程发生错误时,有哪几种解决办法?
测试执行的问题
测试评估的目标
如何提高测试?
C/S模式的优点和缺点
B/S模式的优点和缺点

二、Linux
grep和find的区别? grep 都有哪些用法?
查看IP地址?
创建和删除一个多级目录?
在当前用户家目录中查找haha.txt文件?
如何查询出tomcat的进程并杀掉这个进程,写出linux命令?
动态查看日志文件?
查看系統硬盘空间的命令?
查看当前机器listen 的所有端口?

三、Python
统计python源代码文件中代码行数,去除注释,空行,进行输出?
python调用cmd并返回结果?
冒泡排序
1,2,3,4 这4个数字,能组成多少个互不相同的且无重复的三位数,都是多少?
请用 python 打印出 10000 以内的对称数(对称数特点:数字左右对称,如:1,2,11,121,1221 等)
给定一个整数 N,和一个 0-9 的数 K,要求返回 0-N 中数字 K 出现的次数
判断 101-200 之间有多少个素数,并输出所有的素数
一个输入三角形的函数,输入后输出是否能组成三角形,三角形类型,请用等价类- 划分法设计测试用例

四、MySQL
你用的Mysql是哪个引擎,各引擎之间有什么区别?
如何对查询命令进行优化?
数据库的优化?
Sql注入是如何产“生的,如何防止?
NoSQL和关系数据库的区别?
MySQL与MongoDB本质之间最基本的差别是什么
Mysql数据库中怎么实现分页?
Mysql数据库的操作?
优化数据库?提高数据库的性能?
什么是数据的完整性?

五、Web
  • Web测试和app测试区别?
  • WEB测试环境搭建和测试方法
  • WEB测试教程
  • WEB测试要点及基本方法
  • Web测试页面总结

六、接口测试
什么是接口
如果模块请求http改为了https,测试方案应该如何制定,修改?
常用HTTP 协议调试代理I具有什么?详细说明抓取HTTPS协议的设置过程?
描述TCP/IP协议的层次结构,以及每一-层中重要协议
jmeter,一个接口的响应结果如下:
接口产生的垃圾数据如何清理
依赖第三方的接口如何处理
测试的数据你放在哪?
什么是数据驱动,如何参数化?

七、性能测试
你认为性能测试的目的是什么?做好性能测试的工作的关键是什么?
服务端性能分析都从哪些角度来进行?
如何理解压力测试,负裁测试以及性能测试?
如何判断是否有内存泄漏及关注的指标?
描述软件产“生内存泄露的原因以及检查方式。(可以结合- 种开发语言进行描述)
简述什么是值传递,什么是地址传递,两者区别是什么?
什么是系统瓶颈?

八、selenium
如何开展自动化测试框架的构建?
如何设计自动化测试用例:
webdriver如何开启和退出一个浏览器?
什么是自动化测试框架?
Selenium是什么,流行的版本有哪些?
你如何从命令行启动Selenium RC?
在我的机器端口4444不是免费的。我怎样才能使用另一个端口?
什么是Selenium Server,它与Selenium Hub有什么不同?
你如何从Selenium连接到数据库?
你如何验证多个页面上存在的一个对象?
XPath中使用单斜杠和双斜杠有什么区别?
如何编写SeleniumIDE/ RC的用户扩展?
如何在页面加载成功后验证元素的存在?
你对Selenium Grid有什么了解?它提供了什么功能?
如何从你的Java Class启动Selenium服务器?
Selenium中有哪些验证点?
什么是XPath?什么时候应该在Selenium中使用XPath?

九、计算机与网络
一台计算机的IP是192.168.10.71子网掩码255.255.255.64与192.168.10.201 …
请简述DNS、活动目录、域的概念。
10M兆宽带是什么意思?理论下载速度是多少?
什么是IP地址?
OSI七层网络模型的划分?
TCP和UDP有什么不同?
HTTP属于哪一层的协议?
HTTP和HTTPS的区别?
cookies和session的区别?
HTTP的get请求和post请求的区别?
HTTP1.0和HTTP1.1有什么区别
TCP的连接建立过程,以及断开过程?
客户端使用DHCP获取IP的过程?
写出某个网段的网络地址和广播地址?

十、人力资源
你的测试职业发展是什么?你自认为做测试的优势在哪里?
你找工作时,最重要的考虑因素为何?
为什么我们应该录取你?
请谈谈你个人的最大特色。
一个测试工程师应具备那些素质和技能?
还有问一下你是怎样保证软件质量的,也就是说你觉得怎样才能最大限度地保证软件质量?
为什么选择测试这行?
如果我雇用你,你能给部门带来什么贡献?

最后

整份文档一共有将近 200 页,全部为大家展示出来肯定是不太现实的,为了不影响大家的阅读体验就只展示了部分内容,还望大家海涵,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习!


http://www.ppmy.cn/ops/19093.html

相关文章

docker 集群管理实战mesos+zookeeper+marathon(三)

接上文mesoszookeeper管理docker集群&#xff0c;已安装并成功启动mesos master和mesos slave。 https://www.toutiao.com/article/7221354604351537698/?log_from6b55db495da1d_1681366356776 这个教程主要演示部署和使用marathon 1.1 marathon概述 1.2 下载和解压marath…

计组-学习通-测验题4①

1.下列说法中&#xff0c;正确的是&#xff08;&#xff09; I.半导体RAM信息可读可写&#xff0c;且断电后仍能保持记忆 II.动态RAM是易失性RAM&#xff0c;而静态RAM中存储信息是不易失的 III.半导体RAM是易失性的RAM&#xff0c;但只要电源不断电&#xff0c;所存信息是不…

【项目分享】用 Python 写一个桌面倒计日程序!

事情是这样的&#xff0c;我们班主任想委托我做一个程序&#xff0c;能显示还有几天考试。我立即理解了这个意思&#xff0c;接下了这个项目。 话不多说&#xff0c;来看看这个项目吧—— 项目简介 仓库地址&#xff1a;https://gitee.com/yaoqx/desktop-countdown-day 这是 …

电脑安装双系统

在一台电脑上安装Linux和Windows的双系统可以让你在同一硬件上运行两种操作系统。以下是安装Linux和Windows双系统的一般步骤&#xff1a; 步骤1: 备份数据 在进行任何操作系统安装或重大更改之前&#xff0c;首先备份你的重要数据&#xff0c;以防万一出现问题。 步骤2: 准…

每天一个数据分析题(二百八十五)——四分位差

四分位差是一组数据的上四分位数与下四分位数之差&#xff0c;下面选项错误的是 A. 四分位差受极端值的影响 B. 四分位差是一个局部指标&#xff0c;衡量了处于50%数据的离散程度 C. 四分位差越大&#xff0c;说明处于中间50%数据越分散 D. 顺序数据适合用四分位差来度量离…

springboot+thymeleaf实现一个简单的监听在线人数功能

功能步骤&#xff1a; 1. 当用户访问登录页面时&#xff0c;Logincontroller的showLoginForm方法被调用&#xff0c;返回登录页面的视图名字。 2. 用户提交表单&#xff0c;调用LoginController的login方法。 3.login方法 4.登录验证通过&#xff0c;home方法会被调用&#xf…

实验7:路由冗余协议HSRP配置管理(课内实验以及解答)

实验目的及要求&#xff1a; 理解首跳冗余协议&#xff08;FHRP&#xff09;的工作原理&#xff0c;掌握热备份路由器协议 (HSRP)&#xff08;思科私有协议&#xff09;原理和配置。能够实现网络终端设备虚拟网关的配置和网络故障的灵活切换&#xff0c;完成相应网络的联通性测…

安装crossover游戏提示容量不足怎么办 如何把游戏放到外置硬盘里 Mac电脑清理磁盘空间不足

CrossOver作为一款允许用户在非原生操作系统上运行游戏和应用程序的软件&#xff0c;为不同平台的用户提供了极大的便利。然而&#xff0c;随着游戏文件大小的不断增加&#xff0c;内置硬盘的容量往往无法满足安装需求。幸运的是&#xff0c;通过一些简单的步骤&#xff0c;我们…