我在很多招聘广告中都看到过,一些公司要求QA提供JavaScript知识。所以我的问题是:


将JavaScript用于质量检查有什么用?

评论

如果您的问题仅针对基于Web的应用程序的自动化UI测试的开发人员,还是您对测试Web应用程序的手动测试人员的技能感兴趣(并且可能会构建一些工具来使部分测试自动化,但又不完全自动化),这并不明显自动化测试)和/或非基于Web的应用程序。在每个细分市场中,需要不同的技能。

@PeterMasiar Joe并没有要求花什么时间来谋取最大的收益,而是在问为什么这些公司可能会寻找具有JavaScript知识的质量检查人员。列出可能使用js的目的。

亲爱的未来读者:如您所见,80%的读者认为“ QA” ==“基于Web的应用程序的自动UI测试的开发人员”。对于80%的情况而言,这可能是正确的,而且这些群体正在压倒像我这样的质量检查用户的更多警告,他们希望增加现实生活中的细微差别。提供的答案没有错,他们只是假设除了针对Web应用程序的UI测试外没有其他质量检查工作(是的,正如我在回答中提到的那样,这些工作将使用JS /量角器等)。

@PeterMasiar我认为任何答案都不一定是假定的。他们只是在回答提出的问题...问:“为什么公司会要求使用javascript?”答:“公司可能将javascript用于X,Y或Z。”我没有看到任何答案说“ javascript仅用于x,y或z”。没有人会假设不存在其他类型的QA作业,但是此问题询问的QA作业显然是在使用js进行操作。如果他们不使用它,则很有可能不会被列为要求。

@PeterMasiar我不是在谈论自动化。我说的是使用网站,按F12键,然后去城镇。

#1 楼

要回答您的问题:


1:QA的JavaScript有什么用途?


UI进行UI的网页测试使用Angular和friends等基于JS的UI前端框架作为当前标准编写(有很多:JavaScript框架的生命周期短而残酷)


2:如果使用JavaScript为了进行测试,使用JavaScript测试了哪些类型的东西?


基于Web的应用程序的前端。甚至对于UI使用JS框架之一编写的基于Web的应用程序,JS也不是唯一(通常不是最好)的语言来编写测试。而且应用程序后端很可能是用其他语言而不是JS编写的。


更详细的答案,针对您尚未问到的问题,但应:

TL; DR:JavaScript无处不在(尤其是对于前端),可以在这里停留很长时间,并且很高兴知道您是否喜欢它,但是并不是严格必需的(除了学习琐碎的基础知识之外),因为其他语言(例如Python)更适合IMHO(让您投入更多时间来精通它们)在UI以外的大多数使用情况下(例如API测试,自订DevOps工具等)。
并非所有的测试人员都在为生活编写自动化测试。

手动测试人员几乎不需要或几乎不需要学习任何编程语言。编程会引起一个人特定的思考,因此,如果一些手动测试人员不像程序员那样思考,这将是有益的,这样他们就可以找到那些有编程思想的人会错过的错误。 “无论如何还是编程,mhd的答案都说明了原因(即使我不同意每个手动测试人员都需要学习基本编程)。

学习SQL有助于调查数据库相关问题中的数据。无需成为专家,就能了解和调整专家开发人员提供的SQL查询就足够了。

学习像Python这样的简单语言可以使测试人员编写操作数据,搜索模式等简单工具。

学习JavaScript是一个更大的决定。仅当测试人员工作/对测试用某些JS框架编写的应用程序的前端/ UI部分感兴趣时,这才有用。 />

与规模较小的质量检查团队配合应对
CI中的测试:API +集成测试最适合吗?

共识是


UI测试(使用JS)应该只是整体测试的一小部分(大约4%),大约16%的测试应该针对API(使用JS和其他脚本语言编写) (例如Python,甚至可能使用核心应用程式语言)和
80%单元测试(以网路应用程式的核心语言编写,多数情况下不是JS)。

我们(在我们公司中)在Python / webdriver中有许多UI测试,目前正在考虑过渡到JS /量角器,这是一个漫长而漫长的学习过程。因为您需要学习:


新语言,它是由经验不足的程序员针对小型代码段设计的,其使用方式超出了其原始范围,并且充满了怪癖和陷阱。即使根据喜欢JS的专家所说,JavaScript的一些有问题的特性也很难避免,因此您“必须意识到这些事情并做好应对的准备”。 Studio代码),其中所有内容均由JavaScript文字进行配置
也用JS编写的新工具机制(node.js)。狗食的很好的例子,但它需要全力以赴。
语言本身正在发生变化,放弃了上面提到的“糟糕”部分(ECMAScript版本,"use strict;",TypeScript)。这些复杂性中的许多(以及解决这些问题的策略)对于前端开发人员而言非常重要(因为他们无法控制用户设备上安装了哪种JS版本,甚至无法控制来自哪个供应商的浏览器版本,每个浏览器中都有各自的错误) JS实施),但是对于质量控制人员来说,对于环境质量的控制要好得多,这是不必要的负担。从测试开发人员的POV来看,与JS中的异步承诺相比,处理预期条件(同步)要容易得多。

因此,我认为,学习JS可能是自动化测试人员技能集的宝贵补充(原因由Alexey R.列出,但如果自动测试仪是Python等另一种语言的专家,则可能不是必需的,此外,可以更高效地编写针对测试金字塔中间层(API /服务层)的测试,并且在UI测试中,几乎不需要JS,对于API /服务层,则几乎不需要JS。

我们目前正在考虑在JS中编写一些基本的UI测试,但要维护另一个Python中的一组UI测试,我们计划将其也用于API /服务测试,并且以我们的核心应用程序语言(Python,以及DevOps的大多数工具)使用。这是生产力:我们的开发人员在Python比JS(编写更可靠和可维护的代码)。专家,但对于大多数其他开发人员而言,要达到他们目前在JS上的Python级别的能力将需要一到两年(或更长时间,因为我们的主要应用和DevOps语言仍然是Python)。随着我们在生产级部署JS方面获得更多经验,并且JS变得越来越严格和可靠(“使用严格;” TypeScript等),这种情况可能会改变。

编辑,2018年12月:

(1)随着API测试变得越来越重要(出于充分的原因),问题领域的另一层问题正在巩固:JS非常适合用于手动API测试的GUI工具,例如Postman和Insomnia(使用JS文字),但是那些GUI工具作为回归测试批次的跑步者很烂。单元测试运行者可以更好地处理这种回归。

(2)如果GUI工具将“变量和模板”提升为很酷的功能,则您知道他们想要使用REAL编程语言(Greenspun的第十条规则:任何足够复杂的程序都包含臭虫缠身,速度慢Common Lisp的一半的实现)

(3)JS文字与Python文字几乎相同。 Requests是用于API测试的出色Python库,Insomnia生成Python代码段以与请求库一起使用,可用于单元测试。因此,您可以灵活地进行手动API测试,并具有用于单元测试的灵活语言(Python,带有REAL变量,模板,文件,解析等)。而且使用python解释器的请求几乎就像Insomnia。

(4)API测试允许测试人员在JS中进行更少的测试(较少的GUI级测试),而在后端语言中进行更多的测试。使用Pareto 80/20规则,而不是80%的单元测试和20%的GUI测试(在JS中),我们有80%的单元,16%的API(80%的剩余20%)和GUI的4%。 >
/ Edit>

但是,我们的某些(后端)Python开发专家也不希望花费很多年的时间来精通JS,并且可能会改行以继续提高Python技能,而不是根据我的经验,虽然JS可能是UI自动化测试人员的一种重要语言,但是Python是一种更好的用于文件操作,文本解析和构建命令行工具的语言。 (DevOps工具)比JS具有更少的隐藏陷阱,更好的库(带有argparse这样的小类宝石)以及作为第一语言更容易学习。

因此,尽管学习JS的基础知识既简单又有趣,但是(如果您有解决复杂问题的专家的话),您应该这样做,包括学习怪癖和陷阱,但是如果您精干的话,可能不需要掌握所有复杂性的JS。质量检查工程师用其他语言。

我认为,学习质量检查JavaScript的最有力依据是Appium(用于测试JS中的iOS和Android应用),它对您的职业有多重要。但是由于某种原因,它在其他任何答案中都没有提及。

评论


与Python相比,您的经验/观点认为Python和SQL是质量检查工程师更好的工具,如何回答“为什么公司将JavaScript列为质量检查工程师的要求?”的问题?

– Mindor先生
18年4月10日在19:00

...针对第一个问题,建议其他事物可能更普遍地有助于质量保证窥视是合理的,但针对第二个问题,将其他语言用于其他事物是无关紧要的。他们没有问Python可能用于什么或SQL。

– Mindor先生
18年4月10日在19:27

我已经读过好几次了。在澄清之前,我总是至少要重读一次。很明显,您对这个问题的了解比我多得多。就像有人问“为什么汽车制造商要油漆汽车?”您回答说:“他们的油漆车可以防止生锈,但是并不是所有的工厂工人都在油漆车上工作,有的把座椅放在一起,还有的人进行布线,因此知道如何给汽车上漆对汽车工人来说不是最重要的事情。”

– Mindor先生
18年4月10日在19:49

@PeterMasiar凭空想象,使用Java进行测试并不是一种时尚。此时,我已经为几家不同的公司编写了单元,集成和端到端测试。全部使用Javascript。虽然我同意使用JS进行自动UI测试可能会固有地不稳定,但我也将辩称,无论您使用哪种语言或平台,这些相同的测试本质上都是不稳定的。话虽如此,使用Javascript为Angular或React项目编写单元或集成测试并没有带来任何不稳定。如果正确完成,则它们在100%的时间内都是可靠的。

–tehbeardedone
18年4月10日在21:47

一如既往,这取决于。 Python是最容易上手的,并且在UI之外也很有用(对于随机文件操作或脚本/ bash替换而言,Python非常有用)。但是,如果您已经了解JavaScript,或者希望以后再进行很多前端编程,则JS会负责前端开发。我使用Python(使用Selenium进行UI浏览器自动化)进行了所有UI测试(以及API测试),但是前端开发人员对JS中的前端代码(Angular)进行了单元测试。

– Peter M.-代表莫妮卡(Monica)
4月2日19:38

#2 楼

好吧,除了诸如“ QA工程师应该学习JavaScript以便能够使用与JavaScript一起工作的TA框架”之类的显而易见的答案外,我还要说QA工程师应该学习JS,因为即使是了解JS工作原理或应用方式的基本知识Web开发将您带入了一个新的缺陷查找级别。

了解JS基础知识将使您:


了解如何构建动态和异步UI
当某些事物以不同于您预期的方式工作时,对不同的问题案例进行故障排除,并过滤掉NaB案例。 />帮助您的开发团队解决缺陷的根本原因并获得专业声誉
注入一些JS来帮助您测试应用程序(例如,将当前客户端状态上的一些有价值的信息放入浏览器的状态条或警报)
测试XSS之类的漏洞
...还有许多其他有趣的事情...


评论


软件质量检查不仅限于Web开发。如果产品不依赖网络技术,那么学习JavaScript几乎没有用。

–佛罗伦萨B.
18年4月10日在14:08

抱歉,我无法理解您的意思。我完全同意JS通常对网络有用。我只是以陈述的形式回答了所提出的问题。与SQL,Python和Javascript无关。

– Alexey R.
18年4月10日在15:01

@PeterMasiar:这个问题是在要求JS专业知识的招聘广告中提出的。据推测,以这种方式做广告的公司会在某些东西上使用JavaScript。或者,也许谁写的招聘广告都不知道。

–Jörg W Mittag
18-4-10在15:14



我对这个答案的大部分讨论感到困惑。问题特别是关于为什么QA工程师需要了解Javascript。阿列克谢完美地回答了这个问题。

–tehbeardedone
18年4月10日在15:41

@佛罗伦萨B.我完全不同意。问题特别是关于雇主为什么会寻找具有JS知识的QA工程师。答案解决了提出的问题。它不假设或暗示任何东西。

–tehbeardedone
18年4月10日在17:22

#3 楼

原因之一是使用Protractor编写端到端的自动化测试。
Protractor是用于Angular和AngularJS应用程序的端到端测试框架,您可以使用javascript编写测试。与纯Selenium相比,它设计用于更好的角度应用。

此外,即使对于手动测试的QA工程师,了解项目中使用的编程语言也可能会有所帮助。

#4 楼

您对开发人员使用的技术了解得越多,您的工作就会越好,您就越有价值。换句话说,即使您从不为工作写一行JavaScript,您仍然可以更好地测试其他人的JavaScript。

评论


但是id OP永远不会在JS中写一行,不是花时间在学习JS上,而是花在其他方面,花在哪个OP上?生命短暂,时间宝贵,专注于学习有用的东西。也许学习SQL或Python进行文本解析/文件操作,掌握Jenkins或Elastic Search会比在JS上花费更多时间?

– Peter M.-代表莫妮卡(Monica)
18年4月10日在17:36

获得法律学位也可能更有利可图,但是Op询问了JavaScript。

–user246
18年4月11日在3:21

@ user246-从长远来看,只要您能牢记一切,学习更多会更好。假设某人想要自动化前端和后端代码的测试,即不仅仅是UI。该人需要在本年度选择一种语言。那可以推荐哪一个给他呢?

– MasterJoe
3月24日17:54

#5 楼

我认为基本问题应该是“为什么软件质量检查工程师应该学习编程”。

学习哪种编程语言并不重要,它可以随时更改。作为质量检查工程师,您可以处理来自多个平台(Web前端,Web后端,移动,桌面,IoT设备等)的项目。

可能需要质量检查工程师:


仅执行手动测试
仅执行自动测试
执行手动和自动测试

编程为什么对手动QA工程师有所帮助:


将学习如何构建事物->将更好地了解如何破坏事物(类似于安全测试领域)
将从逻辑上了解事物的工作方式以及它们以特定方式工作的原因->创建更复杂和/或更有效的测试方案
将学习如何正确调试并找到问题的根本原因->在报告问题时非常有帮助,并且可以为开发人员节省很多时间
学习如何解决问题,不仅发现问题->报告问题时,预期结果将更加准确,甚至可以提出新的想法或功能

编程只是质量保证的一部分工程师的角色,但我认为很重要。它也不像开发人员的工作那么复杂,因此我认为每个QA都可以学习如何进行基础编程,并为项目带来更多价值。

#6 楼

随着诸如AngularReactNodejs之类的JS框架的流行,使用JS的测试框架激增了-无论是q212079q,ProtractorNightwatch的E2E框架还是Cypress等的API测试框架。

我同意彼得的回答,我认为这提出了很多正确的观点。

对于这些JS框架激增并需要学习JS的一个经常争论的观点是,如果您的自动化框架是使用与UI / API相同的技术堆栈开发的,则有很多优点。在这篇出色的文章中给出了大量有效的观点和论据。

#7 楼


JavaScript用于QA的用途是什么?




编写自动化测试,例如使用Webdriver.js编写自动化测试Web应用程序正常工作


如果使用JavaScript进行测试,那么使用JavaScript可以测试哪些类型的东西



大多数测试工具可以使用JavaScript编程,例如:


单元和集成测试:https://jestjs.io/

负载和性能测试:https:// artillery.io/

端到端测试:Webdriver.js和https://www.cypress.io/

API测试:https:// www。 getpostman.com/docs/v6/postman/scripts/postman_sandbox



其次,Node.JS运行时环境是世界上增长最快,规模最大的程序包注册表,使用它快速构建方便的命令行工具,可能会自动执行您的测试工作(例如,数据生成或链结之类的东西)。

您可以使用JavaScript进行操作并构建所有内容,这是b为工程界的面包和黄油生态化。

评论


假设我要自动化UI和后端测试。我需要编写很多“非ui”代码来支持我的测试,例如对数据库的读/写,文件解析,消息队列处理等。在今年,我必须选择一种语言来学习,这样我才能自动化ui和后端测试。然后,您会向我推荐哪种语言(作为首要任务)?我以后可以学习其他语言。

– MasterJoe
3月24日18:24

@ MasterJoe2很大程度上取决于应用程序。我将使用与应用程序相同的语言,因为您可以重复使用代码来调用API和数据库。开发人员还可以更轻松地为您提供帮助。如果我是一个人并且应用程序的语言像Scala这样晦涩难懂,我可能会选择动态类型的语言。我会选择Python,因为我想更多地使用它。因此,这也是个人喜好,如果您喜欢静态类型的语言,那就选择它。我至少会选择一种前5种语言(pypl.github.io/PYPL.html),因为它可以轻松地与更多的人一起扩展。

– Niels van Reijmersdal
3月25日10:26

@ MasterJoe2所有顶级语言都支持您的用例,也许还考虑将来的就业能力。因此,扫描工作清单以及您所在区域的高需求。或上下文,如果您想做更多的数据科学,请选择Python,如果您想做更多的Web开发,请选择JavaScript。如果您想进行公司开发,请选择Java / C#

– Niels van Reijmersdal
3月25日10:29

#8 楼

// Why
Java语言正逐渐成为QA工程师所需的语言,这主要是由于其生态系统在现代开发框架中以及软件开发领域中的主导地位。
//前端
关于UI / E2E测试,使用Javascript可为您带来与前端团队更好地协作的优势,因为您将JS作为一个共同点。如果愿意的话,从长远来看,您将能够窥视甚至为他们的代码库做出贡献(代码审查,单元测试等)。
//后端
随着NodeJS Javascript的兴起后端的功能在增加,这为您提供了一个额外的“挂钩”来理解它,与之交互并最终以更有效的方式对其进行测试。
//价值
但是除了使用一种语言这更接近于开发测试用产品所使用的语言,我相信-与Java等其他使用的语言相比,Javascript使您有机会在不断增长和扩展的生态系统中学习和投资时间,平稳地过渡到“纯”开发工作(前端或后端)。即使您从未计划进行这种过渡,如今也拥有很强的技巧。
P.S.您可以在此处找到带有JS自动化框架和工具的简洁列表。

评论


+1,好答案!!

– Vishal Aggarwal
11月30日17:01

#9 楼

在基于nodeJS的领先自动化框架时代:


剧作家
木偶
赛普拉斯 testCafe
Nightwatch
WebdriverIO

webdriverJS
还有更多

学习JavaScript不仅对QA工程师有用,而且是必需的。


>

评论


JS是前端的语言,因此,如果要测试前端,则需要了解一些JS。

–pavelsaman
11月22日下午16:34

#10 楼

好。我会在这里尽可能诚实。

1。

今天,每个人都开始学习自动化,从Java + Selenium作为基础开始。但是后来意识到,仅通过Javascript可以对Web浏览器执行某些操作。因此,您应该了解javascript的一些基本知识,以及如何在selenium,Appium等开放源代码工具中使用。在Java上学习javascript。

对javascript进行质量检查:


我认为JS将是一门很好的第一语言,因为基础非常简单。它肯定有复杂的部分,但是您不一定需要编写这些部分来自动化,而且由于这些天大多数应用程序在Angular 4和node.js中变得混乱,因此我们最轻松地处理基于元素的元素交互将变得更容易。
前端或后端,虽然好消息是您可以通过使用Javascript作为首选语言来进行任何一种操作。.!!

对于前端,您可以了解Web元素定位器,xpaths的概念是最受欢迎的!即如果您只想学习一种类型的元素定位器。然后,只有您的JS知识才能充分利用selenium提供的功能。


作为手动测试人员,您可以通过在浏览器中放置警告和验证错误来轻松地测试应用程序
最后但不是租借它可以帮助您轻松地在测试周期中实现Shift左移。

因为这是本机客户端语言,所以您可以使用此语言设计前端,后端自动化框架。您不仅可以扩展这些框架来进行性能和安全性渗透测试。

您可以在下面引用:Web驱动程序io-https: //webdriver.io/(用于端到端)
量角器-https://www.protractortest.org/#/infrastructure(用于基于前端Web的应用程序)。
带有javascript的硒Web驱动器-https://applitools.com/tutorials/selenium-javascript.html


我想向您推荐的其他几个框架是Chai和Mocha。我尝试过Chai,它非常快,并且在移动/前端JS自动化中也很受欢迎。.

对于后端或端到端测试,赛普拉斯可能是一个不错的选择,它最初是为开发人员进行的单元测试,但也可以供测试人员使用。我已将其用于前端测试,并且体验非常好。

希望对您有所帮助!

#11 楼

作为Web应用程序/前端测试器,除了这里已经提到的许多其他功能之外,您还可以借助JS使您的工作变得更加轻松和快捷。
仅举几个例子。
您可能想要查找并突出显示所有没有alt属性的图片,这只是浏览器控制台中的几行JS:
 // pictures with no alt attribute
for (let i of document.getElementsByTagName('img')) {
    if (!i.hasAttribute('alt'))
        i.style = i.style + "; border:2px dashed red;";
}
 

要查找所有输入字段都没有必填属性吗?
 // inputs w/o required attribute
for (let i of document.getElementsByTagName('input')) {
    if (i.hasAttribute('required'))
        i.style = i.style + "; border: 2px dashed red;";
    else
        i.style = i.style + "; border: 2px dashed green;";
}
 

相同的ID可能是可访问性问题,让我们重点介绍以下元素:
 // highlight elements with same ids
let all = document.getElementsByTagName('*');
let ids = {};
for (let el of all) {
    if (el.hasAttribute('id')) {
        if (ids[el.id]) {
            ids[el.id].push(el);
            for (let e of ids[el.id]) {
                e.style = e.style + "; border: 2px dashed red;"; 
            }
        } else {
            ids[el.id] = [];
            ids[el.id].push(el);
        }
    }
}
 

不应该缺少占位符,让我们找出:
 // inputs w/o placeholder attribute
for (let i of document.getElementsByTagName('input')) {
    if (!i.hasAttribute('placeholder'))
        i.style = i.style + "; border: 2px dashed red;";
    else {
        if (i.placeholder === "")
            i.style = i.style + "; border: 2px dashed red;";
        else
            i.style = i.style + "; border: 2px dashed green;"; 
    }
}
 

等等...
您还可以构建自己的Chrome扩展程序并进一步简化工作。