Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)

news2024/11/19 16:31:28

1.简介

  今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现。到今天为止,大功即将告成;框架所需要的代码实现都基本完成。

2.data数据封装

2.1使用背景

在实际项目过程中,我们的数据可能是存储在一个数据文件中,如txt,excel、csv文件类型。我们可以封装一些方法来读取文件中的数据来实现数据驱动。

2.2案例

将测试账号存储在account.csv文件,内容如下:

account.csv

hg2018

hg2018

hg2019

zxw2019

666

222

参考代码

2.3enumerate()简介

enumerate()是python的内置函数

  • enumerate在字典上是枚举、列举的意思
  • 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
  • enumerate多用于在for循环中得到计数。
2.4enumerate()使用

如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:

参考代码
list = ["这", "是", "一个", "测试","数据"]

for i in range(len(list)):

    print(i,list[i])

上述方法有些累赘,利用enumerate()会更加直接和优美:

参考代码
list1 = ["这", "是", "一个", "测试","数据"]

for index, item in enumerate(list1):

        print(index,item)

3.数据读取方法封装

  数据读取方法也属于公共方法,这里我们首先实现一下,然后将其封装到里边即可。

3.1数据读取方法实现的参考代码
import csv


     def get_csv_data(csv_file,line):

        with open(csv_file, 'r', encoding='utf-8-sig') as file:

            reader=csv.reader(file)

            for index, row in enumerate(reader,1):

                if index == line:

                    return row

 

    csv_file='../data/account.csv'

    data=get_csv_data(csv_file,3)

    print(data)
3.2封装

将其封装在公共方法中,在其他地方用到的时候,直接导入调用即可。

4.utf-8与utf-8-sig两种编码格式的区别

UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序的问题,也因此它实际上并不需要BOM(“ByteOrder Mark”)。但是UTF-8 with BOM即utf-8-sig需要提供BOM。

5.config文件配置

各种配置文件都放在这个目录下。

5.1日志文件配置 

主要是一些日志信息的配置。

log.config

 参考代码
[loggers]
keys=root,infoLogger

[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler

[logger_infoLogger]
handlers=consoleHandler,fileHandler
qualname=infoLogger
propagate=0

[handlers]
keys=consoleHandler,fileHandler

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=INFO
formatter=form01
args=('../logs/runlog.log', 'a')

[formatters]
keys=form01,form02

[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

[formatter_form02]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

6.测试用例封装

这里宏哥举例给小伙伴们演示:封装注册和登录两个测试用例。

6.1测试用例执行开始结束操作封装

测试用例执行开始和结束的封装,其他模块用到直接导入,调用即可。

myunit.py

参考代码
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-11-20
@author: 北京-宏哥   QQ交流群:707699217
Project:Appium自动化测试框架综合实践 - 代码实现
'''
# 3.导入模块
import unittest
from kyb_testProject.common.desired_caps import appium_desired
import logging
from time import sleep

class StartEnd(unittest.TestCase):
    def setUp(self):
        logging.info('=====setUp====')
        self.driver=appium_desired()

    def tearDown(self):
        logging.info('====tearDown====')
        sleep(5)
        self.driver.close_app()
6.2注册用例

开始注册用例代码逻辑的实现。

test_register.py

参考代码
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-11-20
@author: 北京-宏哥   QQ交流群:707699217
Project:Appium自动化测试框架综合实践 - 代码实现
'''
# 3.导入模块
from kyb_testProject.common.myunit import StartEnd
from kyb_testProject.businessView.registerView import RegisterView
import logging,random,unittest

class RegisterTest(StartEnd):
    def test_user_register(self):
        logging.info('======test_user_register======')
        r=RegisterView(self.driver)

        username = 'bjhg2019' + 'fly' + str(random.randint(1000, 9000))
        password = 'bjhg2020' + str(random.randint(1000, 9000))
        email = 'bjhg' + str(random.randint(1000, 9000)) + '@163.com'

        self.assertTrue(r.register_action(username,password,email))

if __name__ == '__main__':
    unittest.main()
6.3登录用例

开始登录用例代码逻辑的实现。

test_login.py

参考代码
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-11-13
@author: 北京-宏哥   QQ交流群:707699217
Project:Appium自动化测试框架综合实践 - 代码实现
'''
# 3.导入模块
from kyb_testProject.common.myunit import StartEnd
from kyb_testProject.businessView.loginView import LoginView
import unittest
import logging

class TestLogin(StartEnd):
    csv_file='../data/account.csv'

    @unittest.skip('test_login_zxw2018')
    def test_login_zxw2018(self):
        logging.info('======test_login_zxw2018=====')
        l=LoginView(self.driver)
        data=l.get_csv_data(self.csv_file,2)

        l.login_action(data[0],data[1])
        self.assertTrue(l.check_loginStatus())

    # @unittest.skip('skip test_login_zxw2017')
    def test_login_zxw2017(self):
        logging.info('======test_login_zxw2017=====')
        l=LoginView(self.driver)
        data = l.get_csv_data(self.csv_file, 1)

        l.login_action(data[0], data[1])
        self.assertTrue(l.check_loginStatus())

    @unittest.skip('test_login_error')
    def test_login_error(self):
        logging.info('======test_login_error=====')
        l = LoginView(self.driver)
        data = l.get_csv_data(self.csv_file, 3)

        l.login_action(data[0], data[1])
        self.assertTrue(l.check_loginStatus(),msg='login fail!')

if __name__ == '__main__':
    unittest.main()

7.小结

到此,Appium自动化测试框架就差下一篇就全部完成了,聪明的你都懂了吗???嘿嘿!慢慢地来吧。

下节预告

下一篇,讲解执行测试用例,生成测试报告,以及自动化平台,请关注宏哥,敬请期待!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1896367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RRStudio 下载及安装(详尽版)

R语言来自S语言,是S语言的一个变种。S语言、C语言、Unix系统都是贝尔实验室的研究成果。R 语言是一种解释型的面向数学理论研究工作者的语言,主要用于统计分析、绘图、数据挖掘。 R 语言自由软件,免费、开放源代码,支持各个主要计…

NLP入门——前馈词袋分类模型的搭建、训练与预测

模型的搭建 线性层 >>> import torch >>> from torch import nn >>> class DBG(nn.Module): ... def forward(self,x): ... print(x.size()) ... return x ... >>> tmod nn.Sequential(nn.Linear(3,4),DB…

面试-微服务篇

springcloud组件有哪些? eureka、ribbon负载均衡、feign、hystrix、zuul/gateway网关 nacos、ribbon、feign、sentinel、gateway 服务注册和发现是什么意思?springcloud如何实现服务注册发现? 微服务中必须要使用的组件,考察我们使…

【React】Ant Design -- Table分页功能实现

实现步骤 为Table组件指定pagination属性来展示分页效果在分页切换事件中获取到筛选表单中选中的数据使用当前页数据修改params参数依赖引起接口重新调用获取最新数据 const pageChange (page) > {// 拿到当前页参数 修改params 引起接口更新setParams({...params,page})…

【数据清洗中分段线性插值法原理】

数据清洗中分段线性插值法原理 一、什么是分段线性插值法?二、分段线性插值法的数学原理三、分段线性插值法的应用步骤1. 引入库2. 创建示例数据3. 应用分段线性插值法4. 可视化插值结果 一、什么是分段线性插值法? 分段线性插值法通过在已知数据点之间…

己内酰胺纯化除杂的最佳工艺

己内酰胺纯化除杂的最佳工艺包括结晶法、离子交换树脂法、精馏法和萃取法等,每种方法都有其特定的应用场景和优缺点。以下是对这些方法的详细介绍: 最佳工艺介绍 ● 结晶法:通过调节pH值,使己内酰胺在特定条件下结晶&#xff0…

CEPH 系统盘挂了,如何使用数据盘恢复

硬盘损坏是早晚的时,CEHP数据盘坏了,使用CEPH的基本都轻车熟路了,如果系统盘坏了呢?不知道的可能会采取整个系统盘全做的方式 前提条件:使用cephadm搭建集群 如果换服务器,请确保CEPH数据盘放到其它服务器上…

油猴Safari浏览器插件:Tampermonkey for Mac 下载

Tampermonkey 是一个强大的浏览器扩展,用于运行用户脚本,这些脚本可以自定义和增强网页的功能。它允许用户在网页上执行各种自动化任务,比如自动填写表单、移除广告、改变页面布局等。适用浏览器: Tampermonkey 适用于多数主流浏览…

【数智化人物展】数势科技创始人兼CEO黎科峰:数智化时代To B软件行业面临颠覆与重塑...

黎科峰 本文由数势科技创始人兼CEO黎科峰投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 2020年,对我而言,是职业生涯中的一个重大转折点。在全球新…

手机如何充当电脑摄像头,新手使用教程分享(新)

手机如何充当电脑摄像头?随着科技的发展,智能手机已经成为我们日常生活中不可或缺的一部分。手机的摄像头除了拍摄记录美好瞬间之外,其实还有个妙用,那就是充当电脑的摄像头。手机摄像头充当电脑摄像头使用的话,我们就…

FPGA基本资源介绍

文章目录 FPGA资源介绍1.可编程输入输出单元(IOB)2.可配置逻辑块(CLB)3.数字时钟管理模块(DCM)4.嵌入式块RAM(BLOCK RAM / BRAM)4.1其他ram 5.丰富的布线资源6.底层内嵌功能单元7.内嵌专用硬核软核、硬核、以及固核的概念 FPGA资源介绍 1.可编程输入输出单元(IOB) 可编程输入…

LangChain终极内幕指南,学会langchain就看它了

1.概述 在人工智能迅速演进的时代,诸如Open AI的ChatGPT和Google的Bard等大型语言模型(LLMs)正彻底改变我们与技术互动的方式。这些技术巨头和SaaS公司正在竞相利用LLMs的威力,创造更为智能和实用的应用程序。 然而,真正的变革并非仅仅停留…

赋能电子行业:三品PLM软件系统如何加速电子产品创新

在当今竞争激烈的市场中,企业如何通过技术创新和管理优化来提升自身的竞争力,已成为一个重要课题。电子行业快速发展的同时也遇到了不少的困难,使得企业效率低下、产能没能跟上时代的发展。而PLM系统的出现,给了电子行业新的希望。…

springboot学生档案信息管理系统-计算机毕业设计源码96509

目 录 第 1 章 引 言 1.1 选题背景 1.2 研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析 2.3 系统性需求分析…

基于JavaScript、puppeteer的爬虫

前期准备: npm puppeteer import puppeteer from puppeteer; puppeteer文档 第一步:启动浏览器,跳转到需要爬取的页面 const browser await puppeteer.launch({ headless: false });const page await browser.newPage();await page.goto(url, { w…

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测 目录 SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【SCI一区级】Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测(程…

DolphinScheduler部署安装or基础介绍(一)

DolphinScheduler概述 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用 DolphinScheduler核心架构 DolphinScheduler的主要角色如下: Ma…

多模态融合算法应用:CT + 临床文本数据 + pyradiomics提取到的图像特征

多模态融合算法应用 CT 临床文本数据 pyradiomics提取图像特征 单模态建模临床数据建模pyradiomics提取图像特征建模CT建模 多模态建模前融合为什么能直接合并在一起? 后融合Med-CLIP:深度学习 可解释性 单模态建模 临床数据建模 临床文本数据&…

中国移动中国联通中国电信数字化转型营销销售讲师培训老师讲授AIGC大模型人工智能5G云算力网络云网终端AIGC人工智能宽带政企物联网专线 IDC智慧城市

唐兴通 数字化商业创新顾问、新媒体营销专家、数字化销售增长教练、沃顿商学院演讲嘉宾。全球创新增长战略大家EM罗杰斯(创新的扩散)、杰弗里摩尔(跨越鸿沟)、亨利切萨布鲁夫(开放式创新)在中国合作者。《…

本安防爆手机:危险环境下的安全通信解决方案

在石油化工、煤矿、天然气等危险环境中,通信安全是保障工作人员生命安全和生产顺利进行的关键。防爆智能手机作为专为这些环境设计的通信工具,提供了全方位的安全通信解决方案。 防爆设计与材料: 防爆智能手机采用特殊的防爆结构和材料&…