gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:50 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com