Chromium Chronicle #17:浏览器测试混合

第 17 集:作者:Toby Huang 在加利福尼亚州旧金山(2021 年 1 月)
过往几集

浏览器测试是对 Chromium 代码的一种自动测试形式,比单元测试更端到端。浏览器测试会创建浏览器实例并测试各种界面元素,而不像单元测试那样只测试纯输入/输出功能。集成自动化测试对于模拟用户的端到端体验非常重要。在编写浏览器测试时,您通常需要以编程方式执行用户可以手动执行的设置操作。为了帮助您做到这一点,mixins 是一套工具,用于以可重复使用的方式执行重要的浏览器测试设置。

实用 mixin 的示例:

  • GuestUserMixin(用于测试无痕模式)
  • UserPolicyMixin(用于从服务器模拟用户政策)
  • FakeGaiaMixin,用于模拟来自 GAIA 服务器的响应

您可以创建自己的自定义 Mixins,用以实现各种目的!

以下代码段以访客身份登录测试。请务必确保您的功能可在无痕模式下正常运行

正确做法
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest {
 private:
  GuestSessionMixin guest_session_mixin_{&mixin_host_};
};

LoggedInUserMixin 是一种以 Family Link 用户的身份登录测试的便捷方式。如果您的功能会影响与儿童监督相关的所有内容,您应针对受监管用户测试您的功能。一个可能的 bug 是,儿童忘记了无痕模式已停用或者未经家长批准无法安装扩展程序。LoggedInUserMixin 是由其他 mixin 组成的复合 mixin。

正确做法
class MyChildBrowserTestClass : public MixinBasedInProcessBrowserTest {
 protected:
  void SetUpOnMainThread() override {
    MixinBasedInProcessBrowserTest::SetUpOnMainThread();
    logged_in_user_mixin_.LogInUser();
  }

 private:
  LoggedInUserMixin logged_in_user_mixin_{&mixin_host_,
                                          LoggedInUserMixin::LogInType::kChild,
                                          embedded_test_server(), this};
};

mixins 的主要好处之一是使用组合而非继承,并避免菱形多重继承方面的问题。 继承多个测试基类会导致钻石问题,但您可以混合搭配 mixin 来避免此问题。使用 mixins 并不会完全摆脱继承问题,因为浏览器测试类仍然需要从 MixinBasedInProcessBrowserTest 继承,但幸运的是,基类是通用的轻量级类。

资源