Cucumber and BDD. Writing UI Autotests on iOS

Foreword

Hello, Habr! In this tutorial article, I want to talk about the basic functions of a framework like Cucumber and its use for creating UI autotests on mobile iOS devices.

My goal is to make the description as simple and understandable as possible for most readers, regardless of programming or automation skills. In general, there is a lot of information about BDD and Cucumber on the network, therefore, in order to avoid repetitions, I do not want to go deep into the general theory, but will focus on the combination of the framework and iOS.

This article will be of interest, first of all, to those testers who are just starting to learn the world of autotests. They will have detailed instructions on how to deploy Cucumber, as well as a detailed example of writing the first test. For experienced users who are not familiar with this tool, the article will give a general idea of ​​Cucumber and, possibly, help with the choice in favor of this (well, or vice versa - another) test framework.

A few words about Gherkin, Cucumber and 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 ‘__CucumberTestsdo
  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-…

A simple precondition step
-
  • swift , . , :

«The app is running» , .

  • Given When Then , . .swift Step Definitions

  • . -, , -

, , , :

  • feature Features. :

Feature:…
In order toAs 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. , , .




All Articles