学习哪种语言可以从手动测试转向自动化/编程?

15

我曾在一个公司的软件/IT部门担任手动测试员和文档(测试计划等)人员。虽然我没有很强的编程背景,但我想学习编程语言和工具。因此,我正在寻找自动化测试工具和编程语言来学习,这些语言和工具也可以为我带来行业优势。

需要注意的几点如下:

  1. 我需要知道哪些工具在行业中最常用,并了解与这些工具相关的编程语言。
  2. 我没有太多时间去学习大量的内容。因此,我正在寻找使用那些语言的工具,这些语言有益于学习,以防我想做更多的编程。
  3. 我更喜欢基于Web的应用程序测试,但这不是限制条件。
  4. 您可以给出2-3种语言,因为我知道不能只有一种胜出。
  5. 我已经使用过使用VBScript的QTP,但VBScript并不广泛使用。我想学习一种具有更广泛基础的语言。
  6. 即使这个问题似乎非常难回答,请仍然给出您的意见和想法。

提前感谢。


编辑: 我认为到目前为止,我决定将选择:

  1. QTP
  2. Selenium
  3. 测试驱动开发方法

我只需要找出一种好的编程语言,给我带来程序员的优势,并适用于多个测试工具(包括Selenium)。也许是Python、Ruby或Java?


我认为到目前为止,我已经决定了我的选择:1. QTP,2. Selenium,3. 测试驱动开发方法。 我只需要找出一种能够给我程序员优势并适用于多个测试工具(包括Selenium)的好编程语言。也许是Python、Ruby或Java? - SKA
在这三种语言中,我会选择Java。我敢说它拥有最成熟的自动化测试工具。虽然Ruby和Python的门槛较低。 - Rob Stevenson-Leggett
谢谢。C#和nUnit怎么样? - SKA
7个回答

11

哇,这是一个非常广泛的问题。我会说你处于一个良好的位置,因为行业正在向测试驱动开发(在编写代码之前编写测试)模型转移。

首先,您需要了解单元测试持续集成和Web自动化。

我将专注于我知道的领域(.NET,Java,Javascript,构建自动化,Selenium)。

  1. .NET中,NUnit可能是最广泛使用的单元测试框架。它是Java世界中JUnit的一个移植版本。在概念上,大多数单元测试框架都非常相似。因此,学习其中一个,就不需要花费太长时间去掌握其他框架。

  2. 我认为阅读上述链接并了解这些概念将使您开启自己的道路。尝试使用Python或Ruby进行实验,因为它们具有低门槛,可以用于测试一些简单的代码。

  3. 对于基于Web的测试,最著名的可能是SeleniumWatin。它们允许您自动化地编写浏览器操作。但是,我很少看到这些工具的好用法,并且它们非常繁琐(需要花费数天/数周的时间)才能设置好并发挥作用。无论使用哪个框架,其背后的概念都是相似的。

    我想我在1、2、3中回答了4、5、6 :-)

希望对你有所帮助


感谢TDD的想法。我认为今天大多数公司都在采用敏捷开发。我需要学习它。 - SKA
敏捷对不同的人意味着很多不同的事情。在我的经验中,敏捷通常意味着“无论如何都可以做”,但实际上它是一个严格的过程。敏捷也不是万能药,上述技术将有助于敏捷,但敏捷最难的部分是纪律性。 - Rob Stevenson-Leggett

3
关于“工业优势”,这取决于您的具体意思。对于大型公司,QTP被广泛使用。需要学习的不是语言,而是工具本身。对我来说,克服工具特定性比学习VBScript更麻烦。如果您考虑性能测试,那么PerformanceCenter可能是最佳选择。这里的语言是C,但是仍然需要花费更多精力去了解工具而非语言。
在一些公司中,有IBM的堆栈,因此Rational软件(FunctionalTester、Robot、PerformanceTester)就会派上用场。在这里,也需要一些工具复杂性(IBM Redbobks可以帮助)。
对于较小的公司,Java/C#可能会更有益。在这里,您可以熟悉junit/nunit/TestNG/MSTest等技术。对于Web应用程序,值得关注的是Selenium/Watij/Watin/Fit/Fitness/Concordian。如果您有时间,请看一下AutoIT、PowerShell、Python、Fiddler、Jmeter、Abbot、Watir/Cucumber和Sikuli。
还有许多其他工具,如WebAii、TestComplete、Twist等商业工具。通常可以获得试用版,以便在一两周内尝试使用它们。
一切都取决于您将接触到哪种项目,以及将要加入哪种公司。
无论如何,在我看来,学习Java/C#到一定程度就足够了。您不需要成为C#/Java专家,知道每个库并且在给定语言上进行深入研究。开发软件不仅仅是了解编程语言,而测试自动化也不仅仅是了解工具/语言(M. Fewster&D. Graham)。因此,不要过于着迷。如果您可以在QTP中编写脚本(而不是记录),使用描述性编程、将逻辑分解到库中、通过正确的方法完全控制TestResults等,则其他工具将不会成为问题。您可能需要一两周时间来学习给定语言的基础知识,但这对于测试自动化来说已经足够了(至少是起步阶段)。您需要更多的经验,了解工具、概念、不同方法的优缺点,以及有一个更大的思路,而不仅仅是“我该如何用那种语言编写这个”(您可以使用Stack Overflow寻求帮助:D)。

我认为你是正确的。QTP 是必须的。我现在正在寻找一种好的编程语言来弥补我的非编程经验。 - SKA
1
那就选择Java/C#,深入研究TDD、BDD、ATDD和其他敏捷开发相关的内容。 - yoosiba
是的,我在考虑使用c#和nUnit。不过这是一个棘手的问题,Java与C#之间的选择。 - SKA

3
这个问题的答案实际上取决于几个因素。首先,你正在做什么样的测试?测试基于Web的应用程序?测试较大程序的库/组件?GUI测试?测试命令行应用程序?
在创建脚本化/自动化测试设施时,我发现以下内容非常有用: TCL - TCL可以像批处理文件一样轻松地与命令行接口,但具有比批处理更强大的语言(包括GUI功能)。如果你正在编写Windows控制台应用程序的脚本(无论是为了测试它们还是为了使用它们来测试其他东西),我建议花时间学习TCL。 AutoIt - 这种脚本语言让你快速轻松地自动化与Windows应用程序的UI交互。它也相当容易学习。如果你想花时间和精力开发屏幕抓取工具,你可以将其与AutoIt结合起来创建一些相当复杂的测试系统。

C - 在测试编译库时,我使用了老式的C语言,并取得了令人惊讶的成功。我会编写一个基本的测试应用程序框架,并创建一个脚本实用程序,根据需要运行的测试动态生成其余代码(我会提供一个样本C片段库,以便用于更复杂的任务)。

Ruby - 当进行自动化测试时,强大的脚本语言非常有用。无论您需要解析测试日志、生成报告还是自动生成测试脚本,熟悉的脚本语言都可以节省大量时间和头痛。我的首选语言是Ruby,但我们公司的其他人更喜欢其他语言,如Perl或Python。语言选择并不太重要,选择一种并学好它就可以了。

根据您所测试的内容,您可能还需要一些内置于代码中的测试工具。Java代码有时会编写JUnit测试,Ruby代码可以使用Test::Unit框架等。这里提供了各种语言的单元测试框架列表。如果您要测试的代码考虑到了单元测试,您需要学习编写代码的语言,以便利用这些单元测试。


我将主要开发网络应用程序功能。 - SKA
1
关于Tcl,它不是唯一能胜任该角色的编程语言。Perl和Python在同样的作用下也表现得非常出色。对于您的情况,我建议使用Python而不是Perl或Tcl,因为Python是更好的编程桥梁。 - David Thornley
谢谢。我丈夫喜欢Python。 - SKA
1
@David Thornley- 我提到TCL是因为我喜欢Windows版本的TCL附带的交互式控制台(你几乎可以将其用作cmd.exe的替代品)。但你说得对,TCL只是众多选项之一。 - bta
@David Thornley:我不同意Python是“更好的编程桥梁”。它与Tcl不同,但在这方面并不比Tcl更好或更差。两种语言都有优点和缺点。不过,我同意Python显然是更好的面向对象编程的桥梁。 - Bryan Oakley

3

如果您正在进行基于Web的测试,您可能需要查看 fitnesse。此外,一个基于Python构建的自动化测试框架是 robot framework


2
  1. Selenium在QA级别的自动化测试中非常流行。
  2. 无论你做什么,都会有一些与你的解决方案相关的学习曲线。
  3. Selenium旨在为web应用程序提供一个测试框架 - 你使用Selenium来操作浏览器中的DOM元素,而不是运行你的应用程序的版本。
  4. Selenium是一个客户端/服务器模型(你在某个可以访问你的QA应用实例的地方运行服务器;你使用客户端库编写你的测试),它提供了多种语言的客户端(Java、Ruby等)

  5. 如果你有专门的QA资源可以编写代码,这种类型的测试是个好主意。它提供了一些高级回归测试。然而,它并非没有缺点:(1)测试可能需要一些时间来运行,(2)你可能需要对你的Web应用程序dom元素进行一些更改,以便轻松使用这个框架,(3)更改Web应用程序将需要更改你的测试代码,这可能是非微不足道的。

你的其他选择是为应用程序代码编写单元测试。通常开发人员会在测试驱动的过程中完成这项工作。因此,开发人员有TDD,而QA则有自动化测试。


谢谢你提供Selenium的想法。我认为我一定会和QTP一起深入研究它。 - SKA

1

我还会添加一个小注释

现在有一个新的测试自动化平台XML2Selenium

该平台构建在经典的Selenium框架之上,提供了许多有用的功能

但它非常易于使用

您不需要学习任何Java或Ruby - 您可以使用XML编写

就像这样:

<!-- here we have some imports Frame - is like a class, you can extend it with extends -->
<import resource="Demo.a-server/03Registration/framesRegist.xml" name="frames"/>
<import resource="Demo.a-server/01Action/FramesAction.xml" name="framesAct"/>
<import resource="Demo.a-server/03Registration/FramesLogin.xml" name="framesLog"/>

<property resource="Demo.a-server/LogValue.properties" name="logValue"/>
<test name="creatAction" description="create and check action">

<frame extends="frames:logAdmin"/>
<frame extends="framesAct:createAct"/>

// here we upload the image
<upload id="img_id0" resource="image.jpg"/>

// click save button with id=save
<button id="save" />

// make a screen shot 
<screenshot/>

// sleep for 3 seconds 
<pause time="3000" />

// make a screenshot again
<screenshot/>

// navigate to the given URL:
<navigate to="${logValue.baseUrl}/admin"/> 

<frame extends="framesLog:logOutAdmin"/>
<pause time="1000"/>
</test> 

您可以在此处查看带有错误的报告: http://xml2selenium.com/demored/xml2selenium/

并且您可以在此处查看成功状态的报告: http://xml2selenium.com/demogreen/xml2selenium/

附注:它支持在所有浏览器中进行测试,而不仅仅是在 Firefox 中使用 Selenium IDE。


0
  • 你可以学习Selenium IDE,它只是Firefox浏览器的一个附加组件,使用它可以记录测试并在需要时播放。IDE的限制是它只能在Firefox上使用。

  • 如果您想在多个浏览器上进行测试,则需要Selenium Grid或WebDriver,这需要了解Java知识。而且,您不需要成为Java专业人员来做到这一点,简单的学习就足够了。

  • 您可以在youtube.com上搜索Selenium教程。

Selenium的优点:

  1. 它是开源的!
  2. 易于学习和实现。
  3. 支持多个浏览器。
  4. 支持多种脚本/编程语言。
  5. 灵活选择,可以通过使用您喜欢的编程语言进行简单的记录和回放(IDE),也可以通过使用您喜欢的编程语言进行完整的框架设计。
  6. 支持并行执行。

希望这可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接