robotframework之python扩展库编写

news2024/11/15 13:21:16

通过对robot自动化框架的使用,大大方便了我们做自动化测试。但很多时候官网提供的扩展库并不能满足我们的测试要求,此时就需要我们编写自己的扩展库。这里以ubuntu下使用python编写自定义扩展库举例说明。

最近笔者在做物联网方面的自动化测试,所以这里以编写MQTT扩展库作为示例:

1) 首先在~/pythonX(笔者使用的python版本为2.7,所以X为2.7)/dist-packages/下新建一个库名,如MyLibrary。

当然也可以在其它路径下新建扩展库,引用时注意指向库的绝对路径即可;按上面新建,引用则只需要填写库名MyLibrary。

2) 新建一个关键字库 _pubmsg.py,如:

#-*- coding:utf-8 -*-

import ConfigParser
import string, os, sys ,time
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
from keywordgroup import KeywordGroup
import sys
reload(sys)
sys.setdefaultencoding('utf-8')


class Pubmsg(KeywordGroup):

    def __init__(self):
        cf = ConfigParser.ConfigParser()
        homedir = os.path.split(os.path.realpath(__file__))[0]
        cfgdir= homedir + "/mqtt_config.ini"
        cf.read(cfgdir)
        self.host = cf.get("server", "host") 
        self.port = cf.get("server", "port")
        self.username = cf.get("auth", "username")
        self.password = cf.get("auth", "password")

    def pubMsg(self,topic,cnt,qos=1):
        """ 可以在这里对关键字作使用说明"""
        host = self.host
        port = self.port
        username = self.username
        password = self.password
        publish.single(topic=topic, payload=cnt, qos=int(qos), retain=False, hostname=host,port=int(port), client_id="", keepalive=60, will=None, auth={'username':username,'password':password},tls=None,protocol=mqtt.MQTTv31)
        print "sned ok"

上面实际为一个python类,里面有一个关键字,为pubMsg。实际一个关键字为一个函数,如果同类关键字有多个,则可以在里面编写多个对应函数。

3)编写了关键字类,但要想在robot framework启动后加载这个关键字,还需要在MyLibrary目录下创建__init__.py文件,内容如下:

import os
from _pubmsg import Pubmsg
#上面_pubmsg为关键字文件名,Pubmsg为类名,如果有多个,字按上面格式一一引入
__version__ = '0.1'  #声明版本

class MyLibrary(
    Pubmsg,
    … #如果有多个类,则依次列出
):
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'  #注意,前面有四个空格

4)此时就可以通过RIDE界面新建测试项目,在库中填写库名MyLibrary,引入该库并使用关键字Pub Msg了。并且此时可以通过F5查找到MyLibrary库,以及对应关键字说明。

如果用户对关键字做文件分类管理,如在MyLibrary下面建子目录,则根目录下__init__.py文件内容这样写:

import os
from keywords import *
#其中keywords为子目录名,里面有多个关键字类,则import为*
__version__ = '0.1'

class MyLibrary(
    Pubmsg
):   
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'

并且在子目录下新建__init__.py文件,文件内容如下:

from _pubmsg import Pubmsg
#如果有多个,则按上面格式一一引入
__all__ = [
"Pubmsg",
…
]

上面就是一个简单python扩展库的编写。根据官方提供的扩展库,上面内容不难整理出,希望对你的自动化测试有帮助。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

自动化测试视频教程、学习笔记领取传送门!!!

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

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

相关文章

FASTADMIN联合查询 搜索

控制器中添加relationSearch开关 控制器里面添加联合查询 MODEL里面添加 js里面添加即可 可以查看数据json 搜索开启searchFileds就可以了

❤️创意网页:生日快乐!穿越奇妙时光的温暖庆祝(HTML+CSS+JS)简单好用

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…

【Linux】使用git 连接到远程gitee仓库

一.创建gitee仓库 登陆到自己的gitee,点击新建仓库 输入仓库名称,注意gitee初次创建仓库时只能设置成私有的 创建后的页面是这样的,复制HTTPS 二.git三板斧 1.安装git 打开xshell,输入命令: yum install git 可以输入…

SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑

场景 Git/ SVN 是代码界的版本控制工具,那么,Flyway 就是一款数据库界的版本控制工具, 它可以记录数据库的变化记录。可能很多公司都是通过人工去维护、同步数据库脚本, 但经常会遇到疏忽而遗漏的情况,举个简单的例…

glob找不到文件而os.listdir可以

前几天遇到了一个问题,就是glob找不到文件而os.listdir可以 /mnt/data/datasets/abc[123]: ├── img_0001.jpg ├──img_0002.jpg代码 import os import glob path /mnt/data/datasets/abc[123] os.listdir(path) glob.glob(os.path.join(path, *.…

ES6: Proxy概念及用法

Proxy如其名, 它的作用是在对象和和对象的属性值之间设置一个代理,获取该对象的值或者设置该对象的值, 以及实例化等等多种操作, 都会被拦截住, 经过这一层我们可以统一处理,我们可以认为它就是“代理器” …

使用 @Autowired 为什么会被 IDEA 警告,应该怎么修改最佳?

# 问题原因 关于这个问题,其实答案相对统一,实际上用大白话说起来也容易理解。 1.初始化问题 先看一下Java初始化类的顺序:父类的静态字段 > 父类静态代码块 > 子类静态字段 > 子类静态代码块 > 父类成员变量 > 父类构造代码块…

前端学习——Web API (Day3)

事件流 事件流和两个阶段说明 事件捕获 事件冒泡 阻止冒泡 解绑事件 事件委托 案例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" …

day1-搜索插入位置

搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: …

flutter开发实战-底部bottomNavigationBar➕PageView

flutter开发实战-底部bottomNavigationBar tabbar在app中非常常见&#xff0c;底部BottomNavigationBar属性 一、BottomNavigationBar属性 BottomNavigationBar组件的常用属性&#xff1a; type&#xff1a;tabbar样式&#xff0c;默认为白色不显示&#xff1b;fixedColor:t…

AR眼镜:可视化声音

推荐&#xff1a;将 NSDT场景编辑器加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 音频可以包括各种各样的声音&#xff0c;从人类语音到非语音声音&#xff0c;如狗吠和警笛声。在为有听力障碍的人设计可访问的应用程序时&#xff0c;应用程序应该能够识别声音并理…

【二分查找】面试题 08.03. 魔术索引

面试题 08.03. 魔术索引 解题思路 改写递归二分查找的思路首先查找mid的值是不是mid 如果是 由于有多个解&#xff0c;那么递归搜索左半边的空间然后如果没找到&#xff0c;首先搜索左半边的空间&#xff0c;然后搜索右半边的空间 class Solution {public int res -1;privat…

mybatis-plus案例报错

报错信息: Error creating bean with name ‘dataSource’ defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Generic.class]: Bean instantiation via factory method failed; nested exception is org.springframework…

ELK 企业级日志分析系统(一)

ELK 一、ELK理论日志管理方案为什么要使用ELK完整日志系统基本特征ELK 简介ELK 的工作流程 二、ELK实验ELK Elasticsearch 集群部署ELK Logstash 部署&#xff08;在 apche节点上操作&#xff09;ELK Kiabana 部署&#xff08;在 Node1 节点上操作) 一、ELK理论 日志管理方案 …

django对数据库中的表进行重新生成

删除数据库中的表删除项目中migrations包下的初始化文件 进入到manage.py目录下执行命令python manage.py makemigrations执行完上述命令之后&#xff0c;再执行命令python manage.py migrate就可以啦 关于详细的数据表生成见博文&#xff1a;https://blog.csdn.net/David_hou…

IO多路复用之select,poll,epoll

所以&#xff0c;我们调用 select 会把所有要管理的 socket 的 fd (文件描述符&#xff0c;Linux下皆为文件&#xff0c;简单理解就是通过 fd 能找到这个 socket)传到内核中。 此时&#xff0c;要遍历所有 socket&#xff0c;看看是否有感兴趣的事件发生。如果没有一个 socket…

Linux常见维护报错,修复MBR引导/修复grub2菜单/内核文件丢失

目录 一&#xff0c;修复MBR 1.模拟MBR损坏 2.重启查看系统 3.借助当前系统的光盘来进行修复 4.进入修复模式 进行修复 5.恢复正常 二&#xff0c;修复grub2菜单 1.出现情况 2.进入修复模式 3.进行修复grub2菜单 4.退出重启即可 三&#xff0c;内核文件丢失 1.进入安全模式 2.挂…

进销存软件哪个好?怎么选?(附模板)

已经把挑选进销存软件的几个注意点归纳的很到位了&#xff1a; 软件价格收费模式&#xff08;按年付费还是一次性买断&#xff09;功能要贴合本企业使用注重数据的准确性与安全性操作一定要简单要有良好的售后服务支持 在这几点的基础上&#xff0c;我简单说一下&#xff1a;…

运维开发面试题第四期(最后有数据库的题)

linux 如何查看当前linux系统的版本号&#xff08;uname -a 内核 cat /proc/version版本&#xff09;、系统状态《如CPU使用&#xff08;top - bn&#xff09;&#xff0c;内存使用情况&#xff08;vmstat,free-m&#xff09;》、如何查看监控磁盘 io负载&#xff08;iostat/ls…

Docker部署Mysql数据库详解

目录 1. Docker部署Mysql 1.1 Mysql容器 1.1.1 创建Mysql容器 1.1.2 进入Mysql容器并登录Mysql 1.1.3 持久化数据 1.2 远程登录Mysql 1.2.1 修改root加密方式 1.2.2 在容器启动时配置加密方式为mysql_native_password 1.3 Mysql编码 1.3.1 Mysql编码问题 1.3.2 Mysql编码…