android - Calabash:如何设置测试数据

标签 android ios cucumber factory-bot calabash

我正在使用 Calabash 实现 GUI 测试。在 The Cucumber Book需要强调的是,场景应该在本地设置测试数据本身,最好使用诸如 factory_girl 之类的库。 .这个问题是关于使用 Calabash 测试 Android 和 iOS 应用程序的性能、清洁度和可管理性。

factory_girl 等工具的好处是测试应该不那么脆弱,并且可以在不使用 GUI 的情况下创建/插入测试数据,这大大加快了测试速度(这使得它们对开发人员更有值(value))。此外,每个场景都应该独立于所有其他场景,这样它就不需要场景AB之前运行,如果 B 是可以正常工作的。这允许开发人员仅运行一个场景。

这对于在本地运行的程序来说似乎是合理的,例如可以直接访问网络服务数据库,以便可以插入测试数据。但是,测试人员如何在另一台设备(模拟器、模拟器、真机)上运行的程序中插入数据。

具体来说,当针对 iOS 和 Android 目标运行时,如何管理测试数据?我很想使用 Set of Fixture Data,如 Cucumber Book,但是,他们明确表示要避免这种情况。

我问是因为我正在创建的应用程序在用户进入主应用程序 View 之前有很多设置。用户需要:

  1. 注册,包括多个步骤:

    一个。按“注册”

    B.接受条款

    C.链接到第 3 方服务(多个步骤)

    D.输入用户详细信息(姓名,...)

    E.按“注册”按钮

    F.按已发送电子邮件中的链接确认电子邮件

  2. 使用新创建的用户登录

  3. 与服务器同步数据

如您所见,如果每个场景都必须从干净状态开始工作,那么只需在应用程序中获取正确的 View 即可成为实时消费者。几乎所有场景都必须执行这些步骤。我希望能够从所需的状态开始并从正确的 View 开始。如何使用 Calabash 在 iOS 和 Android 上实现这一点?

最佳答案

我们能够通过使用“Rest-Client”gem(调用端点)和 Cucumber Hook (用于确定何时生成测试数据)来创建我们自己的测试数据。

请参阅下面的示例,了解我们如何使用 Rest-Client gem、 cucumber Hook 、数据管理器类和工厂模块创建新帐户/客户。这是一个 link,其中包含有关其工作原理的更多信息。

AccountDataManager.rb

require 'rest-client'

require_relative '../factory/account'

class AccountDataManager

  include Account

  def create
    current_time = Time.now.to_i
    username = 'test_acc_' + current_time.to_s
    password = 'password1'
    url = 'http://yourURLhere.com/account/new'

    request_body = manufacture_account(username, password)

    response = RestClient.post url, request_body.to_json, {:content_type => 'application/json', :accept => 'application/json'}

    if response.code != 200
      fail(msg ="POST failed. Response status code was: '#{response.code}'")
    end

    response_body = JSON.parse(response

    clientId = response_body['Account']['ClientId']

    # return a hash of account details
    account_details = {
        username: username
        password: password,
        clientId: clientId
    }
  end    
end

Account.rb

下面的工厂生产请求的主体。

module Account

  def manufacture_account(username, password)
    payload = {
        address:{
            :Address1 => '2 Main St',
            :Address2 => '',
            :Suburb => 'Sydney',
            :CountryCode => 8
        },
        personal:{
            :Title => 'Mr',
            :Firstname => 'John',
            :Surname => 'Doe',
            :UserName => "#{username}",
            :Password => "#{password}",
            :Mobile => '0123456789',
            :Email => "#{username}@yopmail.com",
            :DOB => '1990-12-31 00:00:00'
        }
    }
  end
end

钩子(Hook).rb

您应该将 hook.rb 文件添加到共享目录,然后将对它的引用添加到您的 env.rb 文件(我们将 Hook 文件添加到“/features/support”目录)。

require_relative '../data_manager/data_manager_account'

Before() do
  $first_time_setup ||= false

  unless $first_time_setup
    $first_time_setup = true

    # call the data managers needed to create test data before
    # any of your calabash scenarios start
  end
end

Before('@login') do
  # declare global variable that can be accessed by step_definition files
  $account_details = AccountDataManager.new.create
end

at_exit do
  # call the data managers to clean up test data
end

Login_steps.rb

拼图的最后一 block 是让您的葫芦场景使用您刚刚生成的测试数据。为了解决这个问题,我们在 hook.rb 文件中声明了一个全局变量($account_details),并在我们的 step_definition 文件中引用了它。

Given(/^I log in with newly created customer$/) do
  @current_page = @current_page.touch_login_button

  unless @current_page.is_a?(LoginPage)
    raise "Expected Login page, but found #{@current_page}"
  end

  # use global variable declared in hook.rb
  @current_page = @current_page.login($account_details)

 unless @current_page.is_a?(HomePage)
    raise "Expected Home page, but found #{@current_page}"
  end
end

关于android - Calabash:如何设置测试数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24915532/

相关文章:

ios - Swift:当有很多数据要显示时如何使用 ScrollView

ios - Xamarin iOS 设计器 : There was a error rendering this document

selenium - 如何在每个测试场景后重新启动浏览器

ruby-on-rails - 如何使用 Cucumber 测试非 Ruby、非 Rack API

automation - 如何在 Karate 中使用特定于环境的测试数据

android - Android 方法 onCreate() 中的线程在 10% 的情况下仍会停止 UiThread

android - Firefox Mobile Addon SDK 通过 Android usb 连接错误 - package.json 没有 'main' 条目

java - 异步任务未加载数据

android - 自动完成/自动填充编辑文本 Android

ios - 播放描述 UDP/RTP H264 流 iOS 8+ 的 .sdp 文件