使用 .NET Core 编写端到端测试

什么是端到端测试

端到端测试 也称 E2E ,与 单元测试、集成测试、组件测试、契约测试相比,端到端测试的目的是验证整个系统是否满足业务目标,而不管使用的组件架构如何,为了实现这一点,系统被视为一个黑盒子,测试尽可能多地运用完全部署的系统,通过GUI和服务API等公共接口进行操作。

由于端到端测试更 面向业务,因此它们通常使用业务可读的 DSL,以域的语言表达测试用例。同样的,端到端测试也是大部分国内互联网的唯一测试手段,通常由测试部门通过人工方式在浏览器点击一个个的按钮进行测试。

在微服务体系架构中,由于微服务架构包括针对相同行为的更多移动部件,因此端到端测试通过添加服务之间的间隙的覆盖来提供价值。这使得在服务之间传递的消息的正确性更加可靠,但也确保正确配置了任何额外的网络基础结构,如防火墙,代理或负载平衡器。

端到端测试还允许微服务架构随着时间的推移而发展。随着对问题域的了解越来越多,服务可能会分裂或合并,端到端测试可以确保系统提供的业务功能在如此大规模的体系结构重构中保持不变。

使用 .NET Core 编写端到端测试用例

先决条件Visual Studio 2017 或更高版本、.NET Core SDK 2.1 或更高版本、Windows 10 、Web Driver

安装 Web Driver

安装VS2019、.NET Core SDK 、 Windows10 不再赘述,主要讲一下如何下载安装 WebDriver

本文使用Edge浏览器进行E2E测试,对于Chrome ,请在此处下载 http://chromedriver.storage.googleapis.com/index.html

大部分的情况下,你的win10应该会预装微软的 Edge 浏览器,预装的浏览器一般情况是 18 版本,你可以打开 Edge 浏览器,在右上角的 ··· 按钮点击设置,滑动鼠标滑轮到最下方,如果是18.XXX 则说明是 18版本,否则是 17版本。

对于 18 版本,以管理员模式运行命令行或powershell,并键入以下命令
DISM.exe /Online /Add-Capability /CapabilityName:Microsoft.WebDriver~~~~0.0.1.0

对于18之前的版本,在此右侧选择你的edge版本的驱动

打开VS

打开VS2019,新建 xunit 测试项目,安装 Nuget 包 Selenium.WebDriver 引用到你的测试项目中

在默认的测试方法里添加以下代码:

var driver = new EdgeDriver();

            driver.Url = "https://www.bing.com";

            var element = driver.FindElementById("sb_form_q");

            element.SendKeys(".NET Core");

            element.SendKeys(Keys.Enter);

            Assert.Contains(".NET Core", driver.Title);

            driver.Quit();

你需要添加命名空间引用

using OpenQA.Selenium;
using OpenQA.Selenium.Edge;

上述代码是

  • 启动Edge浏览器
  • 访问 必应 网站,找到搜索框
  • 找到文本框
  • 模拟输入文本 .NET Core
  • 模拟输入 Enter 键
  • 判断当前的浏览器的tab页面标题中包含我们搜索的关键词 .NET Core
  • 最后,关闭浏览器

至此一个简单的模拟用户操作浏览器的单元测试已经完成,先关闭所有的 Edge 浏览器。运行测试,测试会自动打开浏览器,执行上述操作,最后关闭

扩展阅读

对于CI服务器,你需要为其安装运行该测试的环境,对于Jenkins,你需要添加一个win10的Slave节点,并安装对应的WebDriver组件;
对于TeamCity,你需要将一个agent代理安装在一个windows10服务器。

最佳实践

你应该尽可能的使用多的浏览器以测试兼容性和模拟行为,所以,你需要在CI的代理服务器上安装对应的浏览器,目前支持大部分的主流浏览器:
Safari
Chrome
Firefox
IE

你需要下载对应浏览器的驱动程序

你可以直接在你的测试项目中,new ChromeDriver 等浏览器驱动实例,如果未安装,会引发异常,在异常内容里,会有驱动的下载地址