BDD - SpecFlow Driver Pattern 驱动模式

引言

前面 《 BDD - SpecFlow Page Object Model POM 》介绍了 POM 模式,用于提取 Web UI 元素封装成 Page Object 类,今天介绍另外一种 Driver Pattern 驱动模式,这两种模式都是为了提高 Automation 的维护性,可读性,有利于Automation 框架设计。

Driver Pattern 的优势

Driver 模式只不过是 Step Definitions 和 Automation Code 之间附加层。

多年实践经验表明,组织好 Bindings 类和 Automation Code,保持 Bindings 类中的 Code 非常短(一个 Step definition 不超过 10 行 Code),这样可读性强。

Driver Pattern 具有下列优势:

  • 易维护 Autoamtion Code
    将 Code 分成多个部分,使得 Code 方便维护

  • 不同的 Step Definitions 方便重用方法,或则合并多个 Steps 成单个的 Step
    我们经常看到一组 Steps 适用于多个 Scenarios,将 Automation Code 开成不同的类,更方便调用这些方法。

  • Step Definitions 易读
    使得没有 Coding 技术的人也有理解一个 Step Definiton 的实现作用。特别是大的项目,没有人想了解每单个 Step 的实现。

当然 Driver Patter 利用 Context Injection 将多个类联系在一起,详情请参考 《 BDD - SpecFlow Context Injection 上下文依赖注入

举例

这个例子,对比运用 Driver Patern 前后的变化。

不用 Driver Pattern

这是一些 Automation Code 利用 Page Object Model 来检查一些 WebElements 是否存在。Step Definition 中大量的 code 行,不够简短,可读性不强。

在这里插入图片描述

[Then(@"it is possible to enter a '(.*)' with label '(.*)'")]
public void ThenItIsPossibleToEnterAWithLabel(string inputType, string expectedLabel)
{
    var submissionPageObject = new SubmissionPageObject(webDriverDriver);

    switch (inputType.ToUpper())
    {
        case "URL":
            submissionPageObject.UrlWebElement.Should().NotBeNull();
            submissionPageObject.UrlLabel.Should().Be(expectedLabel);
            break;
        case "TYPE":
            submissionPageObject.TypeWebElement.Should().NotBeNull();
            submissionPageObject.TypeLabel.Should().Be(expectedLabel);
            break;
        default:
            throw new NotImplementedException(inputType + " not implemented");
    }
}

运用 Driver Pattern

我们将上面 Step Definition 中大量的 Code 移到一个 Driver 类SubmissionPageDriver 中,这样就能减少 Step Definition 中的 Code 行数到一行。我们将命名一个 CheckExistenceOfInputElement 方法,团队中每个成员都能从名字上理解这个方法的作用。

为了在 Step Definition 中调用 Driver 类中的封装的方法 SubmissionSteps,我们利用 SpecFlow 自带支持的 Context Inject 依赖注入,在 public 构造函数中定义 Driver 类的实例做为参数。

在这里插入图片描述

[Binding]
public class SubmissionSteps
{
    private readonly SubmissionPageDriver submissionPageDriver;

    public SubmissionSteps(SubmissionPageDriver submissionPageDriver)
    {
        this.submissionPageDriver = submissionPageDriver;
    }

    [Then(@"it is possible to enter a '(.*)' with label '(.*)'")]
    public void ThenItIsPossibleToEnterAWithLabel(string inputType, string expectedLabel)
    {
        submissionPageDriver.CheckExistenceOfInputElement(inputType, expectedLabel);
    }

    // ...
public class SubmissionPageDriver
{
    // ...

    public void CheckExistenceOfInputElement(string inputType, string expectedLabel)
    {
        var submissionPageObject = new SubmissionPageObject(webDriverDriver);

        switch (inputType.ToUpper())
        {
            case "URL":
                submissionPageObject.UrlWebElement.Should().NotBeNull();
                submissionPageObject.UrlLabel.Should().Be(expectedLabel);
                break;
            case "TYPE":
                submissionPageObject.TypeWebElement.Should().NotBeNull();
                submissionPageObject.TypeLabel.Should().Be(expectedLabel);
                break;
            default:
                throw new NotImplementedException(inputType + " not implemented");
        }
    }

    // ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BDD(行为驱动开发)测试是一种软件开发方法,旨在通过注重故事和行为来保证软件的正确性。SpecFlow是一种.NET环境下的BDD测试工具,它允许开发人员使用Gherkin语言编写和执行测试场景。 Gherkin语言是一种结构化的自然语言,用于描述软件的行为。它使用关键字如Given(假设)、When(当)和Then(那么)来表示测试场景的不同部分。SpecFlow有效地将Gherkin语言与编程语言(如C#)结合使用,这使得开发人员能够以自然的方式编写测试用例,并将其与实际的代码逻辑连接起来。 使用SpecFlow进行BDD测试可以带来许多好处。首先,它可以使开发人员和业务部门之间的沟通加清晰明了。通过使用Gherkin语言,开发人员可以直观地理解业务需求,并将其转化为可执行的测试场景。这样一来,在开发过程中,开发人员可以准确地了解要编写的代码逻辑,从而降低开发过程中的误解和错误。 其次,SpecFlow可以促进测试自动化。通过将Gherkin语言与实际的代码测试逻辑相结合,开发人员可以将测试用例与代码进行绑定,并自动运行它们以验证软件是否按照预期工作。这样一来,开发人员可以快地发现和修复潜在的问题,从而提高软件质量和交付速度。 最后,SpecFlow还提供了广泛的集成和插件支持。开发人员可以与其他工具(如技术栈中的单元测试框架、持续集成工具等)进行整合,以实现全面的自动化测试流程。此外,SpecFlow还允许开发人员通过定义自己的步骤来扩展其功能,以满足特定的测试需求。 总之,使用SpecFlow进行BDD测试可以帮助开发人员好地理解需求、提高测试效率和软件质量,并提供给开发人员多的工具来管理和执行测试用例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值