📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


本文将讨论一个重要的软件工程原则:DRY(不要重复自己)。
为了证明这些概念在不同编程语言中的适用性,本文中我们将使用Playwright C# 项目,与上一篇文章中使用的TypeScript项目相反。

先决条件:

  1. 1. 安装VS代码:https://code.visualstudio.com/download

  2. 2. 安装最新的dotnet sdk:https://learn.microsoft.com/en-us/dotnet/core/install/windowsnet-installer

  3. 3. 安装VS代码所需的扩展:https://learn.microsoft.com/en-us/dotnet/core/install/windows#install-with-visual-studio-code

  4. 4. 安装PowerShell工具:https://devblogs.microsoft.com/powershell/introducing-powershell-as-net- global-tool/

项目设置:

  1. 1. 在Visual Studio Code(VS Code)中,打开一个空文件夹。

  2. 2. 在VS Code中,打开一个终端并运行以下命令来创建名为“PlaywrightPOM”的xUnit项目:

    dotnet new xunit -n PlaywrightPOM
  3. 3. 在终端中,导航到PlaywrightPOM文件夹。

  4. 4. 通过在同一终端上运行以下命令,为PlayWright添加所需的软件包:

    dotnet add package Microsoft.Playwright
  5. 5. 在当前文件夹中创建下面三个文件夹:

    Pages, Utilities, and Tests.
  6. 6. 在终端中,运行以下命令来构建项目:

    dotnet build
  7. 7. 假设您有最新版本的.NET(写作时为8.0),在终端中运行以下命令来安装所需的各种PlayWright浏览器:

    pwsh ./bin/Debug/net8.0/playwright.ps1 install

搭建一个简单的框架:

  1. 1. 现在查看VS Code中的资源管理器窗口,您可以在PlaywrightPOM文件夹下看到GlobalUsings.cs文件(如果不存在,请创建一个)。将以下行添加到文件中:

    global using Xunit;
    global using Microsoft.Playwright;
    global using System.Threading.Tasks;

    这是用来确保这些命名空间自动包含在项目中的所有文件中,简化了代码,并减少了对重复using语句的需求。在经常使用某些命名空间的大型项目中,这一点特别有用。

  2. 2. 创建一个Pages/BasePage.cs,并在文件中添加以下代码:

    public class BasePage
    {
    protected IPage page;
    public BasePage(IPage page)
    {
        this.page = page;
    }
    public async Task NavigateToAsync(string url)
    {
        await page.GotoAsync(url);
    }
    public async Task ClickAsync(string selector)
    {
        await page.ClickAsync(selector);
    }
    public async Task<string> GetTextAsync(string selector){
        return await page.InnerTextAsync(selector);
    }
    }

    BasePage类封装了常见的网页交互操作,特定子页面就很容易继承它并扩展其功能。
    这种方法促进了代码重用,并简化了Web自动化任务的实现。

  3. 3. 创建从BasePage继承的特定页面类Pages/HomePage.cs。例如,

    public class HomePage : BasePage
    {
    public HomePage(IPage page) : base(page) { }
    public async Task ClickLoginButtonAsync()
    {
    await ClickAsync("#loginButton");
    }
    public async Task<string> GetWelcomeTextAsync()
    {
    return await GetTextAsync("#welcomeText");
    }
    }

    HomePage类封装了主页面的特定交互操作,这样给这部分Web应用程序编写和维护测试脚本就更容易了。
    通过从BasePage继承,它促进了代码重用,并简化了常见web自动化任务的实现。

  4. 4. 在Utilities/PlaywrightUtilities.cs中创建实用函数:

    public static class PlaywrightUtilities
    {
    public static async Task<IPage> CreatePageAsync()
    {
    var playwright = await Playwright.CreateAsync();
    var browser = await playwright.Chromium.LaunchAsync(new
    BrowserTypeLaunchOptions { Headless = false });
    var context = await browser.NewContextAsync();
    return await context.NewPageAsync();
    }
    }

    CreatePageAsync方法封装了初始化Playwright核心、启动浏览器、创建浏览器上下文和打开新页面所需的步骤。
    此实用方法简化了浏览器自动化任务的设置过程,使编写和维护测试脚本更容易。

让我们从忽略DRY原则开始:

创建一个新文件Tests/HomePageTestsWithoutDRY.cs,并添加以下代码:

public class HomePageTestsWithoutDRY
{
[Fact]
public async Task TestHomePageWithoutDRY()
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new
BrowserTypeLaunchOptions { Headless = false });
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();
await page.GotoAsync("https://example.com");
await page.ClickAsync("#loginButton");
var welcomeText = await page.InnerTextAsync("#welcomeText");
Assert.Equal("Welcome", welcomeText);
}
}

上面的测试方法演示了如何在单元测试中使用Playwright进行浏览器自动化,
但它不遵循DRY原则,因为它包含了重复设置代码,这些可以重构为可重用的方法或实用程序类。

现在,让我们实施DRY原则:

创建一个新的测试文件Tests/HomePageTestsWithDRY.cs,并添加以下代码:

public class HomePageTestsWithDRY
{
[Fact]
public async Task TestHomePageWithDRY()
{
var page = await PlaywrightUtilities.CreatePageAsync();
var homePage = new HomePage(page);
await homePage.NavigateToAsync("https://example.com");
await homePage.ClickLoginButtonAsync();
var welcomeText = await homePage.GetWelcomeTextAsync();
Assert.Equal("Welcome", welcomeText);
}
}

上面的测试方法同样演示了如何在单元测试中使用Playwright进行浏览器自动化,同时坚持DRY原则。
这里通过使用实用方法并在HomePage类中封装特定页面的交互,测试代码更加简洁、可读和可维护。

结语

正如你可能已经观察到的:

  1. 1. 通过为共同活动创建可重用的实用函数和基类,DRY原理简化了测试代码并消除了重复。此外,定位器功能被移动到特定页面进行管理,因此管理起来会更容易。

  2. 2. 通过减少示例中的代码行数,以及添加更多测试和可重用的功能,维护和升级将变得更加简单。这种减少将导致进一步的简化,使将来更容易维护和升级代码。

  3. 3. 此外,从可读性/理解性的角度来看,很明显,DRY版本的测试对象是主页面,我们正在执行特定于主页的操作。

我相信这篇文章可以帮助您提高自动化代码的效率、可重用性和可维护性。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述
在这里插入图片描述

更多推荐