RobotFramework框架之导入自己打包的python程序(十五)

 引言

RobotFramework自动化框架(以下简称RF)之前文章我们讲了通过import第三方的library(RequestsLibrary等),在实际项目中第三方的包并不能满足我们的需要,此时我们可自己编写python模块(.py文件)或者包,以实现特定的功能。

下面以一个简单的例子讲解如何在RF中引用自己打包的python包。

功能描述:编写一个python程序,实现数字的运算。

1、使用setup函数打包python程序

1.1 创建一个python文件为NumerCalc.py,并定义一个同名的class。(RF导入单个的python文件时需要文件名和class名为同一个)

#导入keyword,定义中文name,方便RF中使用
from robot.api.deco import keywordclass NumberCalc(object):@keyword (name="两个数之和")def number_sum(self,number_a:int,number_b:int):return number_a + number_b

1.2 将NumerCalc.py存放目录NumberCalc中,并创建空文件__init__.py,同时创建version.py用于存放版本号。

  • 整体目录结构:

  • version.py文件用于配置版本号

1.3 在umberCalc同级目录下创建setup.py文件用于打包python程序。

setup.py文件内容如下

import os
from distutils.core import setup
#获取版本号
version_file = os.path.join(os.path.dirname(__file__), "NumbeCalc", 'version.py')
exec(compile(open(version_file).read(), version_file, 'exec'))setup(name='NumbeCalc',version=VERSION,description='xxxxxxx',author='xxxxxxxx',author_email='xxxxxxx@123.com',install_requires= [],packages=['NumbeCalc'],classifiers=["'Programming Language :: Python :: 3',"],package_data={'': ['*.ini'],'bandwidth_reporter': ['*.ini']},)
#以下是一些参数的介绍
'''
name : 打包后包的文件名
version : 版本号
author : 作者
author_email : 作者的邮箱
py_modules : 要打包的.py文件
packages: 打包的python文件夹
include_package_data : 项目里会有一些非py文件,比如html和js等,这时候就要靠include_package_data 和 package_data 来指定了。package_data:一般写成{‘your_package_name’: [“files”]}, include_package_data还没完,还需要修改MANIFEST.in文件.MANIFEST.in文件的语法为: include xxx/xxx/xxx/.ini/(所有以.ini结尾的文件,也可以直接指定文件名)
license : 支持的开源协议
description : 对项目简短的一个形容
ext_modules : 是一个包含Extension实例的列表,Extension的定义也有一些参数。
ext_package : 定义extension的相对路径
requires : 定义依赖哪些模块
provides : 定义可以为哪些模块提供依赖
data_files :指定其他的一些文件(如配置文件),规定了哪些文件被安装到哪些目录中。如果目录名是相对路径,则是相对于sys.prefix或sys.exec_prefix的路径。如果没有提供模板,会被添加到MANIFEST文件中。
'''

1.4 打开cmd命令,进入以上目录,执行python setup.py sdist,会生成tar.gz结尾的压缩文件。

压缩文件位于如下目录:

1.5 在当前目录解压NumbeCalc-1,0.0.tar.gz,执行以下图中命令python setup.py install安装到默认目录,用于程序引用。

1.6 进入python默认的包安装目录,NumberCalc已经安装到该目录下。

2 RF导入安装的python包

2.1 打开RF的UI界面,在testsuite中导入library。

2.2 导入成功后按F5查看keywords。

2.3 在testcase中引用该keyword,传入参数。

2.4 点击run执行用例。

总结:基于不同的项目要求灵活实现导入功能。

  • RF支持在testsuite直接导入library
  • RF支持先在resource文件导入library,创建userkeyword,然后在testsuite中导入resource文件

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Adversarially Robust Neural Architecture Search for Graph Neural Networks

Adversarially Robust Neural Architecture Search for Graph Neural Networks----《面向图神经网络的对抗鲁棒神经架构搜索》 摘要 图神经网络(GNN)在关系数据建模方面取得了巨大成功。尽管如此,它们仍然容易受到对抗性攻击,这对…

Java读写Jar

Java提供了读写jar的类库Java.util.jar,Java获取解析jar包的工具类如下: import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import java.util.HashMap; import …

c盘清除文件

打开设置 搜索存储

STM32F4系列单片机GPIO概述和寄存器分析

第2章 STM32-GPIO口 2.1 GPIO口概述 通用输入/输出口 2.1.1 GPIO口作用 GPIO是单片机与外界进行数据交流的窗口。 2.1.2 STM32的GPIO口 在51单片机中,IO口,以数字进行分组(P0~P3),每一组里面又有8个IO口。 在ST…

二阶低通滤波器(二阶巴特沃斯滤波器)

连续传递函数G(s) 离散传递函数G(z) 差分方程形式 二阶巴特沃斯滤波器参数设计 设计采样频率100Hz,截止频率33Hz。 注意:设计参数使用在离散系统中! 同理,其他不同阶数不同类型的滤波器设计,如二阶高通滤波器、二阶…

SpringBoot-AOP-基础到进阶

SpringBoot-AOP AOP基础 学习完spring的事务管理之后,接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心,我们先来学习AOP的基础。 在AOP基础这个阶段,我们首先介绍一下什么是AOP,再通过一个快速入门程序&#xff0c…

SPASS-距离分析

基本概念 距离分析是对观测量之间相似或不相似程度的一种测度,是计算一对观测量之间的广义距离。这些相似性或距离测度可以用于其他分析过程,例如因子分析、聚类分析或多维定标分析,有助于分析复杂的数据集。 统计原理 不相似性测度 对定距…

单线程的JS中Vue导致的“线程安全”问题

目录 现象分析原因 浏览器中Js是单线程的,当然不可能出现线程安全问题。只是遇到的问题的现象与多线程的情况十分相似,导致对不了解Vue实现的我怀疑起了人生… 现象 项目中用到了element-plus中的加载组件,简单封装了一下,用来保…

100.相同的树(LeetCode)

关于树的递归问题,永远考虑两方面:返回条件和子问题 先考虑返回条件,如果当前的根节点不相同,那就返回false(注意,不要判断相等时返回什么,因为当前相等并不能说明后面节点相等,所以…

合并两个有序链表(冒泡排序实现)

实例要求:将两个升序链表合并为一个新的 升序 链表并返回;新链表是通过拼接给定的两个链表的所有节点组成的;实例分析:先拼接两个链表,在使用冒泡排序即可;示例代码: struct ListNode* mergeTwo…

图像分类(七) 全面解读复现ShuffleNetV1-V2

ShuffleNetV1 前言 前面我们学了MobileNetV1-3,从这篇开始我们学习ShuffleNet系列。ShuffleNet是Face(旷视)在2017年发布的一个高效率可以运行在手机等移动设备的网络结构,论文发表在CVRP2018上。这个新的轻量级网络使用了两个新…

Node.js之fs文件系统模块

什么是fs文件系统模块?又如何使用呢?让我为大家介绍一下! fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求 注意:如果要在JavaScript代码中&#xff0c…