使用python+Behave编写测试用例

前言

python元素定位

python的BDD框架,参考这里

demo在这里

除了官方提供的Appium-Python-Client框架,还有一个非官方由网易开源的python客户端facebook-wda,facebook-wda这个库的功能非常强大,可以取代appium,不过只支持python,Appium支持多种脚本编写。

环境准备

1、安装python3

brew install python3

2、安装Appium-Python-Client

pip3 install Appium-Python-Client

3、安装Behave

pip3 install behave

4、查看Behave支持的语言

behave --lang-list
Languages available:
ar: العربية / Arabic
bg: български / Bulgarian
ca: català / Catalan
cs: Česky / Czech
cy-GB: Cymraeg / Welsh
da: dansk / Danish
de: Deutsch / German
en: English / English
en-Scouse: Scouse / Scouse
en-au: Australian / Australian
en-lol: LOLCAT / LOLCAT
en-pirate: Pirate / Pirate
en-tx: Texan / Texan
eo: Esperanto / Esperanto
es: español / Spanish
et: eesti keel / Estonian
fi: suomi / Finnish
fr: français / French
gl: galego / Galician
he: עברית / Hebrew
hr: hrvatski / Croatian
hu: magyar / Hungarian
id: Bahasa Indonesia / Indonesian
is: Íslenska / Icelandic
it: italiano / Italian
ja: 日本語 / Japanese
ko: 한국어 / Korean
lt: lietuvių kalba / Lithuanian
lu: Lëtzebuergesch / Luxemburgish
lv: latviešu / Latvian
nl: Nederlands / Dutch
no: norsk / Norwegian
pl: polski / Polish
pt: português / Portuguese
ro: română / Romanian
ru: русский / Russian
sk: Slovensky / Slovak
sr-Cyrl: Српски / Serbian
sr-Latn: Srpski (Latinica) / Serbian (Latin)
sv: Svenska / Swedish
tr: Türkçe / Turkish
uk: Українська / Ukrainian
uz: Узбекча / Uzbek
vi: Tiếng Việt / Vietnamese
zh-CN: 简体中文 / Chinese simplified
zh-TW: 繁體中文 / Chinese traditional

5、查看对应语言的关键字

behave --lang-help zh-CN
Translations for Chinese simplified / 简体中文
             And: 而且<
      Background: 背景
             But: 但是<
        Examples: 例子
         Feature: 功能
           Given: 假如<
        Scenario: 场景
Scenario Outline: 场景大纲
            Then: 那么<
            When: 当<

创建一个iOS测试工程

image.png

写测试脚本

1、创建如下目录结构

├── app # 待测app
│   └── TestApp.app
└── features
    ├── calculate.feature # behave待测功能定义
    ├── environment.py # 环境配置
    └── steps
        └── step.py # 测试steps

2、测试求和功能

创建calculate.feature,输入如下内容

#language: zh-CN
功能: 求和
    场景: 计算两个数相加
        假如 第一个值输入 10
        而且 第二个值输入 20
        当 点击 求和按钮
        那么 结果应该为30

3、配置环境

创建environment.py,输入如下内容

# -*- coding: utf-8 -*
import os
from appium import webdriver

def before_feature(context, feature):
    app = '/Users/yangfangming/Desktop/TestDemo/app/TestApp.app'
    context.driver = webdriver.Remote(
        command_executor='http://127.0.0.1:4723/wd/hub',
        desired_capabilities={
            'app': app,
            'platformName': 'ios',
            'deviceName': 'iPhone 8',
            'platformVersion': '11.1',
            'bundleId': 'com.yfm.TestApp'
        })

def after_feature(context, feature):
    context.driver.quit()

4、创建steps

创建step.py,输入如下内容

# -*- coding: utf-8 -*
from behave import *

@given(u'第一个值输入 10')
def step_impl(context):
    el = context.driver.find_element_by_accessibility_id('textfield1')
    el.clear()
    el.set_value("10")



@given(u'第二个值输入 20')
def step_impl(context):
    el = context.driver.find_element_by_accessibility_id('textfield2')
    el.clear()
    el.set_value("20")


@when(u'点击 求和按钮')
def step_impl(context):
    el = context.driver.find_element_by_accessibility_id('sum')
    el.click()


@then(u'结果应该为30')
def step_impl(context):
    # el = context.driver.find_element_by_accessibility_id('result')
    el = context.driver.find_element_by_class_name('XCUIElementTypeStaticText')
    actual = el.get_attribute('value')
    print(actual)
    assert actual=='30', 'result is 30'

运行测试

behave
# 或者
behave --lang zh-CN

参考

https://github.com/appium/python-client

https://github.com/serhatbolsu/appium-python-bdd/blob/master/testhive/features/steps/steps.py

https://github.com/behave/behave

http://www.runoob.com/python3/python3-tutorial.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,203评论 4 16
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,582评论 1 180
  • 从前有一个小女孩。 她总是安安静静地待在幼儿园,不爱说话,不爱打闹。 有一天她突然开始大哭。声势之大,把所有人都吓...
    duTeamo阅读 310评论 0 0
  • 随着社会节奏的加快,社交软件例如:微信、Facebook等社交软件变得越来越重要了。刷朋友圈也渐渐成为了我们生活社...
    穆姑娘Claire阅读 1,016评论 2 8
  • Homebrew是OS X上强大的包管理器,为系统软件提供了非常方便的安装方式,独特式的解决了包的依赖问题,并不再...
    卡戎li阅读 541评论 0 0