- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Calabash 实现 GUI 测试。在 The Cucumber Book需要强调的是,场景应该在本地设置测试数据本身,最好使用诸如 factory_girl 之类的库。 .这个问题是关于使用 Calabash 测试 Android 和 iOS 应用程序的性能、清洁度和可管理性。
factory_girl
等工具的好处是测试应该不那么脆弱,并且可以在不使用 GUI 的情况下创建/插入测试数据,这大大加快了测试速度(这使得它们对开发人员更有值(value))。此外,每个场景
都应该独立于所有其他场景,这样它就不需要场景A
在B
之前运行,如果 B
是可以正常工作的。这允许开发人员仅运行一个场景。
这对于在本地运行的程序来说似乎是合理的,例如可以直接访问网络服务数据库,以便可以插入测试数据。但是,测试人员如何在另一台设备(模拟器、模拟器、真机)上运行的程序中插入数据。
具体来说,当针对 iOS 和 Android 目标运行时,如何管理测试数据?我很想使用 Set of Fixture Data
,如 Cucumber Book
,但是,他们明确表示要避免这种情况。
我问是因为我正在创建的应用程序在用户进入主应用程序 View 之前有很多设置。用户需要:
注册,包括多个步骤:
一个。按“注册”
B.接受条款
C.链接到第 3 方服务(多个步骤)
D.输入用户详细信息(姓名,...)
E.按“注册”按钮
F.按已发送电子邮件中的链接确认电子邮件
使用新创建的用户登录
如您所见,如果每个场景都必须从干净状态开始工作,那么只需在应用程序中获取正确的 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 和 Android 上使用),并且希望有选择地覆盖各种预定义步骤。一个例子是: Given /^I press the "([^\"]*)" button$/ d
有人可以发布一些帮助。我尝试了不同的配置,但无法从 Rubymine 中运行 Calabash Android 测试。虽然在终端上工作。 最佳答案 经过一些试验和错误,终于找到了解决方案。以下是您需要
如何在特定场景下更改 Hook 中的代码以重置(iOS)应用程序? 仅适用于标签提及为@reset 的场景 最佳答案 https://github.com/cucumber/cucumber/wiki
如何在 calabash-ios 和 calabash-android 中找到相关的 WebView 元素。我知道两者之间的语法略有不同,但问题是一样的。这是一个例子: 1) This query
如何使用 Calabash-Android 的 v0.5 旋转屏幕?因为先前包含在 rotation.rb 文件中的预定义旋转步骤已被删除。 最佳答案 我想分享将设备方向更改为所需的纵向或横向的命令:
我在 IOS 和 Android 的移动自动化中使用了 Appium。我想知道提供 Calabash 的优势,以及这两种工具生成的脚本是否有共同点? 我已经点击了这个链接:Appium VS Cala
尝试运行 ..-cal calabash-ios 项目的目标时出现链接错误。 错误是: `Ld /Users/balaiyan/Library/Developer/Xcode/Derived
我正在尝试获取 native 应用程序中切换开关的状态。 这是开关本身的查询,ON时: query "Switch id:'quadrant_buzz'" 及其结果 [ [0] {
我发现了 Calabash,将其与 cucumber 一起使用,但我遇到了问题。 我开始编写一些代码来测试我的基本应用: Scenario: I can see a button Test Butto
我刚开始使用 Calabash 并遇到了一个 ListView 。 对于每个 ListView 行,我想检查一些文本和 ImageView 是否存在。 但是我不确定如何遍历 ListView ? 有点
我很好奇它是如何获取 Android Activity 中的 UI 元素的 ID 并模拟不同的事件的? iOS 也是如此吗? 最佳答案 在内部,calabash 使用在手机上运行的检测后端。这个后端是
我在 auth.feature 文件中有一个场景: Scenario: Authorize Given I am on the Main View When I touch the "ServiceB
我已经使用 calabash 创建了跨平台测试。当我尝试测试我启动的 android 应用程序时: calabash-android run -p android 但是 calabash 试图在手机模
看起来像葫芦pre-defined steps不足以满足我的使用需求。 我的场景是这样的: - 如果用户第一次登录,我的应用程序会弹出一个包含 EditText 字段的 View ,要求用户输入昵称,
我的 android 应用程序项目以编程方式启动系统对话框以安装受信任的 CA 证书: Intent intent = KeyChain.createInstallIntent(); intent.p
我正在使用 Calabash 通过 UI 自动执行一些测试,但我遇到了一些问题。 我的步骤如下:Then I touch the "login" button . 当我运行 cucumber ,控制台
我正在使用 Calabash 实现 GUI 测试。在 The Cucumber Book需要强调的是,场景应该在本地设置测试数据本身,最好使用诸如 factory_girl 之类的库。 .这个问题是关
我是 Calabash 测试的新手,在尝试制作多语言应用程序时遇到了障碍。这是我的测试场景:- 我选择一个文本字段。- 使用一种语言输入字符串,然后使用另一种语言输入一些文本。 这里出现了障碍:当我尝
我正在尝试在 Windows 8 上运行 calabash-android。我已经安装了 Ruby 2.0.0 并添加了以下路径(系统变量): ANDROID_HOME = C:\Developmen
我正在为 Android 应用程序运行 calabash-android 测试。我需要将图像和视频附加到特定部分。我可以到达图库部分,然后无法从设备库中选择项目。有没有办法在我的测试目录中保留视频和图
我是一名优秀的程序员,十分优秀!