移动端测试项目实战TPshop

TPshop项目测试流程

  1. 先手点,过一遍基本的流程,大体的操作这个要测试的功能
  2. 写测试用例。(尽可能考虑各种可能性)
  3. 对着测试用例,进行功能测试。
  4. 考虑自动化。

项目准备

准备之前用到的base和配置文件等

先写一个正确的测试脚本

进入登录界面

  1. 创建两个文件在对应的文件夹下,login_page、test_login
  2. 在test_login下,setup中,连接手机(导入模块,使用init_driver函数)
  3. 在login_page下,写类,继承BaseAction
  4. 在test_login下,创建page对象
  5. 分析步骤,发现部分步骤是必须要有的。考虑写在page的init中
  6. 因为在login中,发现一定是有需要前置的步骤,在page的类里,重写init的函数,并且在调用父类init之后,执行“必要的步骤”com.tpshop.malls:id/tab_txtv

登录测试脚本

  1. 输入手机号,输入密码,点击登录。在page中实现,并且在test调用
  2. 在page中写is_login的函数。找手机号,如果找到,返回true如果没找到,会报错,在except中返回false
  3. 在test中断言 is_login 的结果

获取toast

下载 appium-uiautomator2-driver

 cnpm install appium-uiautomator2-driver

前置代码添加

desired_caps['automationName'] = 'Uiautomator2'

使用driverWait的方式寻找

def find_toast(driver, message, timeout=3):
    """
    # message: 预期要获取的toast的部分消息
    """
    message = "//*[contains(@text,'" + message + "')]" # 使用包含的方式定位

    element = WebDriverWait(driver, timeout, 0.1).until(lambda x: x.find_element(By.XPATH, message))
    return element.text

注意:某些函数的写法Uiautomator1与Uiautomator2的不一样

driver.press_keycode(4) # 点击返回,Uiautomator2的写法
driver.keyevent(4) # 点击返回,Uiautomator1的写法

改进

改进1:将登录成功失败改为toast

  1. 在base中,写了一个find_toast的函数,返回,根据部分内容,找到的全部内容。
  2. 在base中,写了一个is_toast_exist的函数,如果找到,则返回true,如果找不到,则报错并且返回false
  3. desired_caps['automationName'] = 'Uiautomator2'!!!!!!!
  4. 切记!
  5. 切记!
  6. 切记!

以后,如果需要获取toast的全部内容,使用find_toast。

如果需要获取toast的部分内容是否存在,使用is_toast_exist。

改进2:数据参数化进阶

data.yml文件数据格式改成:

test_login:
  test_login_001:
    username: "章三"
    password: "zhangsan"
  test_login_002:
    username: "李四"
    password: "lisi"
test_sign_up:
  test_sign_up_001:
    username: "王五"
    password: "wangwu"
    number: "185030303030"
  test_sign_up_002:
    username: "周六"
    password: "zhouliu"
    number: "13788888888"

base_yml.py 里面解析yaml文件的函数改成:

import yaml

def yaml_data_with_file(file_name, key):
    with open("./data/" + file_name + ".yml", "r") as f:
        data = yaml.load(f)[key]
        case_data_list = list()
        for case_data in data.values():
            case_data_list.append(case_data)

        return case_data_list

对应的test_login.py 就改成:

import pytest, os, sys

sys.path.append(os.getcwd())
from base.base_yml import yaml_data_with_file

def data_with_key(key):
    return yaml_data_with_file("login_data", key)


class TestLogin:

    @pytest.mark.parametrize("args", data_with_key("test_login"))
    def test_login(self, args):
        print("测试登录 2 个数据")
        print(args["username"])
        print(args["password"])

    @pytest.mark.parametrize("args", data_with_key("test_sign_up"))
    def test_sign_up(self, args):
        print("测试注册 3 个数据")
        print(args["username"])
        print(args["password"])
        print(args["number"])

项目管理知识:

截图

应该在重要的时候,进行截图,并且上传到报告中。(比如,在测试搜索功能。那么搜索的结果,就算是重点)

截图使用,get_screenshot_as_file("路径"),需要在项目中,专门建立一个文件夹。名字叫做screen。来保存截图

上传截图到allure

allure.attach('描述', open('xx.png', 'rb').read(), allure.attach_type.PNG)

类似于allure的文字描述。第一个参数是描述,第二个参数是描述的内容,第三个参数是类型。

关于git的忽略文件

在上传git项目的时候,有些不需要上传的文件,比如,python的缓存以及编译文件。包括report的报告。还有pycharm的.idea等。如果不想上传,需要做一个忽略文件的操作。

忽略文件的名字,叫做.gitignore。具体规则,可以百度。一般把,github自带的python的忽略文件,再加上report和.idea就可以了。

剩下的操作都一样,这个忽略文件要放在项目目录下。(和.git同目录)

配置jenkins

  1. 运行服务
  2. 项目,git的地址,账号密码,时间触发器,pytest的环境,allure报告的文件夹名称(xml的所在的文件夹名字)。这样可以生成报告,会自动检测git代码的更变。
  3. 发件人和收件人。
  4. 发件人需要先测试,搜索location 配置管理员邮箱,搜索“邮件通知”配置smtp以及用户名和密码。点击测试发信。
  5. 发件人正经的配置,搜索,content,需要配置选择html的模板,以及模板的内容,在上面一点,有一个英文的 email notifacation。配置smtp以及用户名和密码。

app开发一些常识

关于toast。toast是只在android中有。不是所有的两分(秒)钟消失的那个视图都叫做toast。

  • android常见控件及其开发中的所属类名:

    • 按钮:Button

    • 文本框,显示文字:TextView

    • 输入框,用来输入:EditText

  • ios常见控件及其开发中的所属类名:

    • 按钮:UIButton

    • 文本框,显示文字:UILabel

    • 输入框,用来输入:UITextFiled

在iOS中也有一个叫做UITextView的东西,是用来输入大段文本的

在iOS类名中有前缀,涉及到视图都是UI开头。

命名空间:Android中有命名空间这个概念,所以在不同的文件夹中起相同名字的文件是可以区分的;但是在iOS中没有这个概念,所以在不同文件夹中起相同的名气是不行的。iOS开发中也有一个常用框架(AFNetworking),是用objective-c开发的文件,类的后缀名是.h和.m

不想appium重置应用

在base driver那里加一句:
desired_caps['noReset'] = True

bug

关于xpath的and问题。

字符串多个条件用and连接,如果and后面直接是@那么可以不要空格。如果是其他的字符,需要加空格

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