Prefácio
Olá, Habr! Neste tutorial, quero falar sobre as funções básicas de uma estrutura como o Cucumber e seu uso para criar autotestes de IU em dispositivos móveis iOS.
Meu objetivo é tornar a descrição o mais simples e compreensível possível para a maioria dos leitores, independentemente das habilidades de programação ou automação. Em geral, há muitas informações sobre BDD e Cucumber na rede, portanto, para evitar repetições, não quero me aprofundar na teoria geral, mas vou me concentrar na combinação do framework e iOS.
Este artigo será de interesse, em primeiro lugar, para aqueles testadores que estão apenas começando a aprender o mundo dos autotestes. Eles terão instruções detalhadas sobre como implantar o Cucumber, bem como um exemplo detalhado de como escrever o primeiro teste. Para usuários experientes que não estão familiarizados com esta ferramenta, o artigo dará uma ideia geral do Cucumber e, possivelmente, ajudará na escolha deste (bem, ou vice-versa - outro) framework de teste.

Algumas palavras sobre Gherkin, Cucumber e BDD
Gherkin PO, - . «» Gherkin , - , (Given-When-Then-And) //.
Cucumber - , behavior driven (BDD) , Gherkin.
BDD (behavior driven development) - , - . BDD :
Scenario: Login with PIN
Given the app is running
And I'am registered user
And I see Login screen
When I enter 4-digits PIN
Then I am logged in
, , , , . .
Cucumber
Cucumber iOS semi-official (-?) .
Cucumber - ocoaPod , . CocoaPod
sudo gem install cocoa pods
pod init
. , :
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
use_frameworks!
inhibit_all_warnings!
def test_pods
pod 'Cucumberish'
end
target ‘__CucumberTests’ do
test_pods
end
- , . ,
XCFit
sudo gem install xcfit
Xcode, , cucumberish bundle. CucumberTests . Features
build phases CucumberTests, Copy Bundle Resources, Compile Sources Link Binary With Libraries
Xcode,
pod install
.xcworkspace , . Screens, Step Definitions Supporting Files. - Add Files to.
, Cucumber!
( 2020) « » - . , . Xcode :
@objc
class func CucumberishSwiftInit()
var elementQurey
var elementQuery
expectedMenuCount: uInt = uInt(menuCount)!
expectedMenuCount: Int = Int(menuCount)!
expectedCellCount: uInt = uInt(cellCount)!
expectedCellCount: Int = Int(cellCount)!
. ⌘+U . , , «Tests successfully executed 0 from 0». , , , , .
" "
Cucumber :
Features - .feature, BDD . , Gherkin, ,
< >CucumberTests.swift . , Given , . . , , ,
Screens - .swift , ,
Step Definitions - .swift ,
Common - commonStepDefinitions.swift , , ( , ..)
. .feature , Features, , beforeStart CucumberishSwiftInit()
?
, . , , , c Xcode , ⌘+U.

:
/
-
Given And . Given , Given-And-And-…

swift , . , :

«The app is running» , .
Given When Then , . .swift Step Definitions
. -, , -
, , , :
feature Features. :
Feature:…
In order to …
As a …
I want to …
feature , Gerkin
swift Given
step definition
Given
«the app is running» . , - «», Given-And-And-… . , .

- . , , , .
, , , «My credentials», .
. , , .

, , «Get started». , , «0000»,

, , , , , . «0000».
UIInterruptionMonitor, , (faceid ) .
, / , «My credentials». ,

, credentialList , , . , , "Delete" "Delete credential".

. , «My credentials».
CommonStepDefinitions
Given-, .
CommonStepDefinitions.swift. Common , , .
, Menu, Confirm Deny, «Please confirm». , , , step definitions . CommonStep :
…
And I see the "Menu" view
And I see "Confirm" button
And I see "Deny" button
And I see "Please confirm" text
…
common , , :

common , . , - . step definitions accessibility identifier.
, BDD definition, ⌘+U. , , , ( ) executeFeatures .swift .
, - , , - , .
. , 50+ 5 . 5- 45 , . , 10 , , .
- ( «I have no credentials»). , .
Xcode . . .

. .
?
cucumber , , BDD . .
- , . , , 3-4 . , -, , BDD-. , BDD . ? ? cucumber .
, BDD PO -- , , Jira - .
, - , PO , , , , . step definitions .
, , , , , .
, , UI- Cucumber. , , .