硒项目诞生于Jason Higgins的日常工作中, Paul Gross和Jie Tina Wang在2004年为ThoughtWorks工作了一段时间. 同时向他们的同事展示硒, 保罗·汉曼特看到了巨大的潜力, 并建议开源硒,并让它在驱动模式下工作,这样其他编程语言就可以访问它. 因为它从早期开始就是开源的, 很多人都为它成为今天这样强大的web自动化工具做出了贡献.
硒 IDE在制作过程中也发挥了很大的作用 硒项目 它是如此的流行和广泛. 由Shinya Kasatani创建的Firefox插件, 这个工具允许用户记录并在浏览器中以一组硒核心命令的形式播放他们的浏览器动作. 然后,他们可以将这些操作保存到一个文件中,并在以后作为一个自包含的脚本重用它们.

硒:不仅仅是一张安全网
版本1被证明是一个有趣的框架, 这让许多人对自动化测试过程大开眼界. 在此基础上构建的版本2引入了WebDriver作为接口,并且即将成为 W3C标准. 硒的WebDriver架构也被用作移动应用程序测试框架的起点,例如 Appium, Sel结束roid 和 ios司机.
硒图书馆
硒使自动化web应用程序和站点成为一个精简的过程. 它使用HTML4/HTML5/CSS标准中可用的选择器来查找网页元素. 这种方式, 使用一些聪明的脚本可以减轻手工测试web应用程序的负担. 硒 WebDriver接口使得使用任何现代浏览器和使用HTML/CSS选择器自动化网站和应用程序成为可能,这些选择器的交互方式与使用浏览器的真实用户相似——只是稍微快一点.
硒实际上由三个独立的组件组成:
- 硒 WebDriver (硒 2)
- 硒 IDE
- 硒的远程控制
具备硒 WebDriver知识是必备的关键技能, 我们正在寻找使用硒驱动程序编写测试. 硒远程控制是硒服务器的一部分, 一个允许硒浏览器测试在专用服务器网格上并行运行的组件, 并且只是构建自动化系统的一个附加组件.
而硒 IDE对于新用户和快速测试硒或被测系统的实际工作方式是很好的, 它不能被认为是一种能够完全完成工作的工具, 因为对于具有大量功能的大型项目,需要以逻辑和可读的方式组织大量测试. 创建硒自动化测试, 编程技能, 建筑技能, 还需要技术知识, 与任何开发过程一样.
问题和答案
硒被设计成一个易于使用的框架, 这样技术经验不太丰富的人就可以用它来满足日常需要. 任何人都可以使用硒 IDE编写脚本,甚至不需要离开浏览器. 但实际上,能使用它的人之间不止有一条细微的界限, 找个擅长的人, 同时掌握了硒开发和测试流程. 在大多数情况下,硒开发人员需要做的不仅仅是编码和数据驱动. 在接下来的章节中,我们将看到在选择完美的候选人时,哪些技能可以被评估.
自动化还是不自动化
而关于自动化覆盖范围的争论仍在继续, 没有人能否认硒作为web自动化事实上的标准的身份,以及它对测试世界的巨大影响. 一些组织已经变得疯狂的自动化, 我们不会雇佣任何没有自动化和开发背景的人. QA开发者, 自动化测试工程师, 软件工程师在测试(SET)或其他组织调用, 将各种工具(包括硒)授权到被测系统的上下文中,现在是非常有需求的, 只要开发周期足够快,这种趋势就会持续下去, 随着网络软件变得越来越复杂.
另外还有一个问题:是否需要全职的、专门的硒开发人员? 有人可能会说,编写应用程序及其特性的开发人员也可以使用硒创建自动测试. 在很多情况下,这可能是真的.
这个问题没有直接的答案, 因为这取决于许多不同的因素,如项目规模, 解决方案的复杂性, 人力资源, 和最后期限. 如果一个web开发人员需要花费他一半的工作时间自动化和编码测试, 这并不是有效的. 有经验的专门的硒开发人员在自动化上花费的时间要少得多, 从一开始就知道如何以最好的方式组织代码, 并将创建一个质量层的测试. 他们还可以提供见解和建议,让这些功能更人性化和更高效. 在没有自动化的情况下,覆盖不容易测试的边缘情况和情况可以帮助为最终产品创建另一层安全. 这只是取决于你对产品最终质量的决心,以及从第一天起让它正常工作的决心.
问:将项目及其所有特性自动化总是合适的吗?
然而,不可否认的是,自动化在日常开发中是非常有用的, 在某些情况下,自动化是不合适的, 甚至有可能. 同时,考虑到 测试金字塔, 有太多的自动化UI测试并过分依赖它们是不明智的, 因为所有主要的应用功能都必须覆盖在超出(单元)的层次上, 服务). 因此,只有关键的应用程序特性需要使用UI覆盖率进行测试. 一些次要的应用程序功能可以在无人参与的情况下通过主要的应用程序工作流和对这些组件使用特定的单元测试进行测试.
QA、开发者或两者兼而有之?
问:作为开发者或QA,你如何看待自己的主要地位?
严格意义上来说,你所寻找的既不是QA也不是开发者. 在一个不断发展的世界里, 您正在寻找的是一个拥有适合敏捷开发哲学的广泛技能的人. 对于硒开发人员来说尤其如此, 也许比你的团队中任何其他角色都重要. 他们当然不是传统的QA, 而且大多数时候, 他们没有写出任何值得通过公司发布的代码. 他们所做的就是提供对减少测试时间和费用至关重要的支持代码, 给产品提供一个超越常规测试的支持.
尽管如此,他们还是需要具备QA技能. 创建有效且有意义的测试场景, 测试边界情况, 然后把它们编码成脚本应该是他们日常工作的一部分. 硒开发人员需要理解复杂的业务逻辑和规则, 因为这是使自动化工作真正值得的要求之一.
硒开发人员不应该害怕手工测试, 因为让我们面对现实吧, 你可以自动化很多东西, 但你不必把一切都自动化. 在自动化测试效率不高,以及人的判断比计算机提供的信息更多的情况下,手动测试仍然是有效的. 计算机善于执行,但不能做出判断. 所以利用人类最擅长的事情. 自动化从手工测试结束的地方开始. 使用硒 WebDriver进行自动化一直是手工工作的后继者, 因为它进一步验证了在手工测试应用程序时做出的良好判断.
Language-gnostic
Q:在编写硒测试时,您更喜欢使用哪种语言?
硒 WebDriver被移植到许多流行的语言, 所以如果你正在寻找一个硒专家, 你不必太担心他使用的语言. 当然,除非它对实际业务或公司政策至关重要. 驱动程序库可用于Java(原生),c#, Python, Ruby和JavaScript. 对于经验丰富的硒开发人员来说,切换到任何一种不同的语言应该是非常容易的. 驱动程序库的api几乎相同, 把重点放在语言的最佳编码实践上.
让我们来看看这些差异在实践中的表现:
Java:
导入组织.junit.AfterClass;
进口静态组织.junit.断言.*;
导入组织.junit.BeforeClass;
导入组织.junit.测试;
导入组织.openqa.硒.By;
导入组织.openqa.硒.WebDriver;
导入组织.openqa.硒.WebElement;
导入组织.openqa.硒.火狐.FirefoxDriver;
公共类TestPT视讯 {
私有静态FirefoxDriver驱动;
@Before
public static void initializeDriver(){
司机 = new FirefoxDriver();
}
@Test
公共空间测试Title () {
司机.get (" http://www.eisstocksport.net”);
assertequal(司机.getTitle(),“雇佣最顶尖的3%的自由开发者、设计师和其他技术人才.");
}
@After
public static void closeBrowser(){
司机.辞职();
}
}
Ruby:
需要“硒-web司机”
需要的小型试验/自动运行
class TestPT视讯 < Mini测试::Unit::TestCase
def设置
@司机 =硒::WebDriver.火狐:
结束
def 测试_title
@司机.得到的http://www.eisstocksport.net”
assert_equal @司机.标题“雇佣最优秀的3%的自由开发者、设计师和其他技术人才."
结束
def拆卸
@司机.辞职
结束
结束
Python:
进口unit测试
从硒导入web司机
类PT视讯Test (unit测试.TestCase):
@classmethod
def setUpClass (cls):
cls.司机= web司机.Firefox ()
def 测试_title(自我):
自我.司机.get (" http://www.eisstocksport.net”)
自我.assertEqual (
自我.司机.标题,
“雇佣最优秀的3%的自由开发者、设计师和其他技术人才.")
@classmethod
def tearDownClass (cls):
cls.司机.辞职()
正如你自己看到的, 差别很小, 并期望实际需要编写的代码量.
HTML + CSS
事实上,使用硒 WebDriver可以在没有任何HTML或CSS技能的情况下自动化web页面或应用程序测试. 硒可以提供选择器和操作规范,这些可以直接使用. 但如果应聘者具备HTML和CSS的知识和理解,则会有很大的优势.
问:你如何评价你的HTML & CSS知识?
即使是中等程度的HTML和CSS知识,也可以证明对硒开发人员在处理web应用程序或测试站点时是有益的. 特别是当它是一个更重的标记或复杂.
了解这两种技术的另一个好处是,它允许硒开发人员以更直接的方式帮助前端开发人员, 或者甚至通过代码评审. 这是许多组织的经验之谈, 让项目成员参与到彼此的代码中被证明对整个开发过程是有益的.
问:什么是CSS? 如何在测试自动化环境中使用它?
CSS或级联样式表是一种向终端客户端描述HTML表示的声明性语言. 使用CSS,纯HTML页面将呈现为样式精美的文档.
然而,它们对于实际的测试自动化可能并不那么重要, 具有CSS知识的硒开发人员可以帮助他们选择更好的选择器. 如果需要,它们还可以为高级断言使用CSS属性. 它们可以帮助识别编写糟糕的CSS,以便前端开发人员修复它们.
问:简要描述HTML4页面布局.
每个网页至少包含一个头和一个包裹在HTML根元素中的body标签. 而head保存一些特定页面的元数据, 所有与实际用户界面相关的内容都在body标记中, 并对最终用户可见.
硒开发人员将在body标记中进行编程, 找出定位元素和执行各种操作和断言的最佳方法.
Q:从测试自动化的角度来看,使用HTML5的页面有什么不同吗?
No. HTML5使用一组特定的标签,以便拥有更标准化和注释良好的页面布局, 但是这对实际的测试自动化过程几乎没有影响. 虽然,这也取决于实际的web应用程序正在测试.
Q:什么是HTML DOM?
域对象模型, 或者简称为DOM, 是HTML页面的编程接口吗, 并在每次加载页面时构造. 它是一个树,将页面的元素表示为具有自己属性的对象, 用于操作的方法以及它们所响应的事件. 通过使用HTML对象模型,可以使用JavaScript操作页面及其元素.
高级网络浏览器知识
硒开发人员不仅要知道如何编写代码,这一点非常重要, 但也知道浏览器的功能. 火狐,Chrome, IE (Edge), Safari等., 它们在页面加载方面都有细微的差异, 元素渲染和处理页面的内部机制. 你必须了解他们所有的怪癖,才能使这些工具符合他们的需要. 硒开发人员不需要完全掌握开发人员的知识水平, 但是他们需要比任何普通用户更了解浏览器. 这包括使用浏览器提供的工具, 如开发人员控制台, 网络流量, 性能工具等等.
例如, Chrome有配置文件, 哪些可以为开发者带来优势, 作为在每次运行之前设置测试集的一种方式, 比如在网站上加载图片, 使用不同的下载目录, 关闭高级或标准的浏览器功能. Firefox也是一样,它的武库中也有一组类似的隐藏和非隐藏选项. 掌握这些将使开发人员作为自动化工程师的生活更容易, 对于在各种场景中测试应用程序非常重要.
今天的浏览器就像迷你操作系统(有些人甚至倾向于这样看待它们),有很多功能, 而大多数普通电脑用户都将其视为软件中最重要的一部分, 甚至不知道他们不是它的组成部分. 掌握它们,让自动化生活更快乐.
JavaScript是一个需要帮助的朋友
如果候选人了解JavaScript,这也是一个很大的优势. 在某些情况下,JavaScript可能是实现应用程序工作流部分自动化的唯一方法. 在95%的病例中,这是不需要的. 但它仍然是一个区别因素,特别是当项目使用大量JavaScript时. 因为可以在硒 WebDriver的上下文中运行或触发JavaScript, 让它成为自动化解决方案的一部分是一个简单的过程.
许多现代项目几乎都只使用JavaScript进行后端(服务器端)和前端(客户端)开发, 拥有这些知识可以使硒开发人员与其他人保持同步.
硒开发人员还可以帮助检查JavaScript代码,帮助修复bug或在bug出现之前找到它们. 这对你的团队及其成功来说是无价的.
Q:如何使用硒 Driver调用JavaScript对象或方法?
可以使用Java中的JavascriptExecutor类在驱动程序的上下文中直接调用JavaScript, 其他语言也是如此. 脚本可以同步或异步执行:
// ...
导入组织.openqa.硒.JavascriptExecutor;
导入组织.openqa.硒.火狐.FirefoxDriver;
// ...
WebDriver 司机 = new FirefoxDriver();
JavascriptExecutor js;
if(驱动程序实例){
js = (JavascriptExecutor)驱动程序;
}
js.executeScript(“返回文档.getElementById (myid);”);
// ...
这种方式, 你可以访问整个HTML DOM,也可以调用任何脚本或对象,已经是页面的一部分.
一般的编程知识
硒 IDE使得硒对于任何想要快速深入web自动化的初学者来说非常简单. 而是为了制作高效可靠的脚本, 最好将代码组织成可重用的单元. 虽然可以使用硒 IDE来记录和回放动作, 在敏捷开发中维护代码是相当麻烦的, 很多功能都在快速频繁地改变. 所以,如果你在寻找一个专家,你要找的是一个优秀的开发人员.
问:你应该如何组织自动化代码?
如果使用Page Object模式组织硒测试代码,这也是一个很大的优势, 这将在后面几段讨论. 与支持代码解耦的测试代码可以进一步提高可维护性. 不过这里有一些指导方针:
- 让自定义支持库远离实际的测试代码
- 创建可以在测试之间重用的工作流助手方法
- 使用页面对象来组织代码
- 删除旧的不相关代码
- 在添加新功能时,删除已经覆盖的测试
因为自动化测试的变化非常快,所以建议随着开发的进行而改变它.
用于封装测试的测试库
组织测试代码的很大一部分实际上涉及到测试单元/规范/特性库的使用,这些库将生成测试断言并检查工作流的一部分. 没有它们,也可以执行实际的测试脚本, 但它们确实提供了额外的控制水平, 特别是当项目使用CI(持续集成)服务器作为开发过程的一部分时.
问:你对测试库有什么经验?
测试库的选择将根据实际使用的编程语言而有所不同. 但是它们有一个共同的元素:断言硒执行的操作会产生预期的结果, 它是一个网页元素被显示, 正在呈现的文本或浏览器界面上可能发生的任何事情. 按语言分类,一些最流行的库是:
- Java: jUnit和TestNG
- Ruby: rspec,小型试验
- Python: py.测试、unit测试鼻子
问:你有写黄瓜专栏的经验吗?
处理特性的一个有趣库是Cucumber, 测试以类似于业务规范的方式指定,即使没有技术知识的人也能阅读和理解:
场景:下载业务报表
鉴于我是以经理的身份登记的
当我搜索“最新报告”时
那么报告列表应该包含“昨天的报告”
这种方式, 考试变得更加具有交际性, 而编程实现则与业务需求无关. 如果您有许多想要参与测试的涉众,那么这是一项再强调不过的技能, 他们没有实际的技术技能来自己解释代码.
页面对象模式
问:你使用过页面对象吗? 它们有什么用?
在Java 硒库版本2中引入, 页面对象模式是将代码组织成可重用类的好方法. 考虑下面自动化PT视讯站点应用程序的部分代码:
司机.findElement(通过.CssSelector(“div [data-role = ' custom_field '] ")).单击();
司机.findElement(通过.CssSelector(“div[数据值=“开发人员”]”)).单击();
司机.findElement(通过.Id (" talent_email ")).s结束Keys(“硒.dev@eisstocksport.net”);
司机.findElement(通过.Id (" talent_password ")).s结束Keys(“我的密码”);
司机.findElement(通过.Id (" talent_password_confirmation ")).s结束Keys(“我的密码”);
司机.findElement(通过.Id (" talent_full_name ")).s结束Keys(“硒Dev”);
司机.findElement(通过.Id (" talent_skype ")).s结束Keys(“硒.dev”);
司机.findElement(通过.Id (" save_new_talent ")).单击();
它起作用了, 但是,如果工作流因任何原因而改变,那么它就不太可能被重用或易于扩展. 使用页面对象模式, 这个简单的测试变成了一个高度可重用的类,可以初始化并在多个测试中使用:
包com.toptal.常见的.pageobjects;
导入组织.openqa.硒.By;
导入组织.openqa.硒.WebDriver;
导入组织.openqa.硒.WebElement;
公共类SignUpPage {
私有最终WebDriver驱动;
private By talentDiv = By.CssSelector(“div [data-role = ' custom_field ']”);
private By developerDiv = By.CssSelector(“div[数据值=“开发人员”]”);
private By 设计erDiv = By.CssSelector(“div[数据值= '设计']”);
private通过emailField =通过.Id(“talent_email”);
private By passwordField = By.Id(“talent_password”);
private By passwordConfirmField = By.Id(“talent_password_confirmation”);
private By fullNameField = By.Id(“talent_full_name”);
private By skypeNameField = By.Id(“talent_skype”);
private By saveTalentButton = By.Id(“save_new_talent”);
public SignUpPage(WebDriver驱动){
这.司机=司机;
if (!verifyBasePageTitle) {
抛出新的IllegalStateException(“这不是注册页面”);
}
}
public String getPageTitle() {
字符串标题=驱动程序.getTitle ();
返回标题;
}
public boolean validybasepagetitle () {
String expectedPageTitle="独家访问顶级开发者和设计师| PT视讯";
返回getPageTitle ().包含(expectedPageTitle);
}
public SignUpPage selectTalent(String talent) {
司机.findElement (talentDiv).单击();
如果人才.equals (developerValue.文本){
司机.findElement (developerDiv).单击();
} else if.equals (设计erDiv.文本){
司机.findElement (设计erDiv).单击();
其他}{
司机.findElement(通过.CssSelector(字符串.格式(" div[数据值= ' % s ']”,人才)).单击();
}
返回;
}
public signupstep2 applyAsDeveloper(String email, 字符串密码, 字符串fullName, 字符串skypeName) {
司机.selectTalent(“开发人员”);
司机.findElement (emailField).s结束Keys(电子邮件);
司机.findElement (passwordField).s结束Keys(密码);
司机.findElement (passwordConfirmField).s结束Keys(密码);
司机.findElement (fullNameField).s结束Keys (fullName);
司机.findElement (skypeNameField).s结束Keys (skypeName);
司机.findElement (saveTalentButton).单击();
返回新SignUpStepTwo(司机);
}
}
直接想到的是,当用户使用页面对象时,页面对象作为浏览器中实际发生的事情的确切对应物是最有意义的, 就像一颗驱动书页追寻目标的心.
不同的语言有不同的页面对象库, 但它们都有一些共同之处:它们将页面上的所有元素进行逻辑布局, 同时也为访问页面上的任何功能提供了方便的方法. 它们也可以用作路由器, 页面对象创建后,web应用程序的动作和链接在一个逻辑结构,是相同的一个系统测试. 然后,您可以将它们与等待状态结合起来,以创建一个复杂的机制,该机制将驱动您的测试,并包含所有对执行重要的逻辑.
尽管现在有很多网站和web应用程序使用单页原则来呈现内容, 页面对象在大多数情况下仍然是有效的,至少让web元素以逻辑和干净的方式组织起来.
Q:页面对象应该是真实页面的精确副本吗(将所有元素作为单独的对象)?
No. 因为通常每个页面上都有很多元素, 只有那些创建工作流自动化所必需的元素才应该在页面对象中建模. 在页面上放置每个元素实际上是适得其反的,因为它会使页面对象变大, 笨手笨脚, 很难维护,而且几乎无法使用.
Q:在页面对象中直接断言是明智的吗?
应该避免. 页面对象做得最好的是通过干净的API保持和公开页面结构和页面的内部逻辑. 可以让Page Object验证元素的某些状态,但它不应该直接断言.
硒的细节
Q:哪个元素选择器被认为是最理想的?
创建测试某些功能的硒驱动程序脚本非常容易. 更容易的是使更改和支持脚本代码变得困难, 要么使用过于依赖页面结构的复杂选择器, 或者在开发测试脚本时不遵循页面对象模式. 最好的选择是那些最与众不同的, 同时, 随着应用程序的增长和布局的改变,这是最简单的方法.
例如:
司机.findElement(通过.CssSelectors(“div.一些部分div.my-section > a#some-id"))
当你可以只做简单的选择:
司机.findElement(通过.Id("一些Id "))
这也引出了另一个问题:对于页面元素的定位器来说,什么选择器实际上是最好的? 而务实的人会说,任何有效的东西都足够好, 实际上有一个最好遵循的等级制度:
id > name > class >= css_selector > tag > text > xpath
这也是有争议的, 但是总结一下背后的逻辑, id是每个页面最具特色的定位器,因此应该首先使用. 元素名称也可以非常独特. CSS类也很棒, 特别是在使用独特的CSS类构造良好的网页上.
有时,将实际的链接文本用作选择器是非常可取的, 因为当选择页面元素时,测试可以直接捕捉到界面上的任何打字错误或功能问题.
问:简要解释高级CSS选择器的用法.
当一切都失败时, 高级CSS选择器是查找页面上的元素或元素组的最佳选择. 下面是一些最常用的短语:
- Direct child: div > a
- 子节点或子节点:div
- 指定id: div#myid a
- 特定类:div.myclass一
- 具体匹配:ul#mylist li:n -child(2)
CSS选择器也可以用于搜索页面的内容,但这是它自己的主题.
问:当有两个元素没有任何特别之处时,你应该怎么做?
有时会出现这样的情况:页面上的两个元素的HTML / CSS标签的每个部分都完全相同, 包括元素文本, 但它们确实有需要自动化的不同功能. 有多种方法可以解决这个问题:
使用findElements方法返回一个元素列表. 然后就可以通过索引访问列表中的任何元素
使用CSS / XPATH特定的匹配器和匹配元素的精确出现
Q:如果一个元素选择器对于页面上的多个元素是相同的,会发生什么?
只有第一次出现的元素才会被选中, 因为页面是从上到下阅读的, 这将是最接近文档顶部的元素.
掌握超时
问:说明显式和隐式等待的区别.
Web页面通常由许多不同的元素组成, 如链接, 段落, 按钮, 输入字段, 文本字段, 组合框和自定义对象. 而且它们中的大多数会在整个页面加载后立即加载, 而且它们在加载后几乎可以立即被访问. 但是也有异步加载元素的情况, 等待服务器响应, 或来自外部服务提供者的响应.
知道一个元素是否可以自动化的唯一方法是等待它完全加载, 硒 WebDriver提供等待. 它们可以是显性的,也可以是隐性的. 隐式等待就像在访问元素之前总是等待3秒,或者每0次轮询DOM.5秒来确定是否满足条件. 如果元素条件为真,则直接显式等待检查, 并暂停脚本执行,直到满足确切的条件, 如果在设置的持续时间后仍未满足,则抛出超时错误.
隐式:
司机.管理().超时().TimeUnit implicitlyWait (5.秒);
明确:
WebDriverWait = new WebDriverWait(司机, 5);
等待.直到(ExpectedConditions.elementToBeClickable(通过.id (" myid ")));
如你所见, 隐式等待是在驱动程序级别完成的, 因此,每当一个新页面打开, 在完成实际的元素查找之前, 司机最少等待5秒. 在现实中, 在某些情况下,你必须将两者结合使用, 尽管显式等待通常被认为是更好的做法. 在测试更可靠的情况下,隐式等待肯定更好. 使用显式等待将使测试工作得更快,这也是非常重要的. 明智地使用等待是关键. 如果应用程序使用AJAX较多, 适当的等待状态对于使自动化可靠地工作至关重要.
HTTP规则
那么,当你从一个页面导航到另一个页面时,在浏览器中会发生什么呢? web上的一切都是从向服务器发出HTTP GET请求开始,然后从服务器获得许多不同形式的响应, 是完整的网页, 图片, 保存应用程序上下文中使用的数据的声音或简单响应. 今天的互联网是多种技术的混合体, 但在其核心, 它仍然是那个从一开始就统治着互联网的老HTTP协议. 有大量来自供应商的api, 今天的应用程序之间的联系更加紧密,有时很难将一个应用程序与其他应用程序隔离开来. 最近有一种趋势是将应用程序分为两层, API层与所谓的微服务(后端)和UI层(前端)作为相互通信的独立工作单元. 有了这种分离, 硒测试实际上不仅仅是功能, 而是集成测试, 它们的价值变得更加明显.
虽然硒开发人员并不迫切需要了解大量HTTP知识, 它可以在很多方面帮助他们实现自动化, 特别是当应用程序使用大量的外部api时. 他可以记录他们的回答,然后在测试中模拟他们的速度和可靠性, 他也可以直接进行HTTP调用,因为它们是应用程序的一部分. 他甚至可以使用自己选择的工具对API应用层进行单独的测试.
问:哪些方法在浏览器中被认为是安全的?
出于安全原因,web浏览器中只允许选项、GET、HEAD、POST、PUT和DELETE. 不允许使用TRACE和CONNECT等方法. 像Internet Explorer这样的老浏览器对HTTP方法的支持甚至更加有限.
问:URL中参数的使用如何影响自动化?
很多web应用程序都在url中使用参数, 这在测试特定内容时非常有用, 而不需要经历复杂的应用程序工作流. 考虑一下这个例子:
司机.get (" http://www.eisstocksport.net/companies/apply?interested_in =开发人员”)
虽然自动化整个工作流是可取的,以达到这一点, 也可以操作请求并直接获取其他测试所需的参数:
司机.get (" http://www.eisstocksport.net/companies/apply?interested_in =设计师”)
通过这种方法, 不需要通过整个应用程序工作流,就可以参数化测试并验证条件行为.
虽然你可以通过使用硒 WebDriver自动化网站和应用程序做很多事情, 将来会出现需要更多东西的情况. 例如, 您可以将硒自动化与数据库测试结合起来, 验证数据是否正确地存储在数据库中. 您甚至可以创建测试报告,记录在自动化测试中所做的一切,并将其保存为各种格式, ,以供日后参考或参考CI报告.
说的词, 对于硒开发人员来说,了解它们将是非常有益的. CI服务器用于运行各种测试, 构建应用程序并将其打包到自包含的包中. 可以使用无头驱动程序/浏览器,比如PhantomJS,在CI服务器上运行测试,或者使用 xvfb 在不运行显示服务器的情况下运行真正的浏览器. 无论你选择什么, CI对于使测试自动化成为每个团队成员都可以依赖的工具是无价的. 了解如何设置它们,并为运行硒或任何其他类型的单元或集成测试做准备,对于开发的成功至关重要.
沟通
编程的核心是通信. 不仅在人与机器之间,也在程序员之间. 使用代码与每个团队成员交流是一项很容易被忽视的技能, 因为让我们面对现实吧, 没人知道明天会发生什么:会有其他人加入这个项目, 应用程序的某些部分会丢失文档,没有人会知道它是如何编码的, 否则,您会发现每次有人试图使用代码时,您都要解释之前做过的部分代码. 无法读懂的代码可能会让您产生一种悲伤的感觉,认为您或其他人应该在一开始就做得更好. 文档固然很好,但代码本身需要尽可能清晰和交流.
对于硒开发人员, 最重要的是,他们对项目内部的一切都给出了他们的客观意见, 是代码, 设计, 特性集和实现, 并在团队的每一个成员之间进行交流. 这并不像看起来那么容易, 因为我们都是人类, 有自己的观点, 有我们自己的骄傲, 有时,这种混合会成为做出正确决策和推动项目进展的障碍. 掌握沟通不是在学校里就能学会的, 至少不是官方研究的一部分. 这是社会智力的一部分,不是每个人都有.
精通英语是在线交流的重要组成部分, 特别是在编码和从事自由职业项目时. 因此,事先评估应聘者的语言技能是很重要的.
总结
今天的Web项目如果没有某种自动化作为它们的基础部分,就不可能被看到. 使用硒支持的任何语言, 良好创建的自动化测试和测试套件可以提供一个安全网,确保任何回归在进入生产之前就被捕获, 这样的发展就会变得可靠和愉快. 硒的第三版正在制作中,它将是一个已经建立的遗产的进化. 问题不在于你是否应该拥有自动化, 问题是你的团队在自动化和质量保证方面有多专注, 以及你能在其中投入多少.
从第一天开始自动化项目绝对是一个最佳实践, 有经验丰富的硒自动化工程师和开发经验将是一个很大的优势.
如果您的项目仍然没有硒测试, 而且有自动化的需求, 不要犹豫. 现在就开始! 对于软件开发和团队士气来说,这种差异将是巨大的. 自动化并不是使所有项目问题消失的魔术棒, 但这至少会让他们更显眼.