如何将java类导入到Robot框架中

时间:2016-07-22 11:41:02

标签: java python robotframework

我无法理解如何在Robot Framework中导入.jar文件。

以下是代码:

*** Settings ***
Library   MyLibrary

*** Test Cases ***
My Test
    Do Nothing
    Hello    world

和Java:

public class MyLibrary {

    public void hello(String name) {
        System.out.println("Hello, " + name + "!");
    }

    public void doNothing() {
    }

}

在.jar中提取后,我输入了C:\ Python27 \ Lib \ site-packages \ MyLibrary,我创建了空__init__.py文件。用pybot TestJavaLibrary.robot执行我的Robot文件后,我得到了这个警告:

[ WARN ] Imported library 'MyLibrary' contains no keywords.
==============================================================================
TestJavaLibrary
==============================================================================
My Test                                                               | FAIL |
No keyword with name 'Do Nothing' found.

如何使用这个jar,就像外部库一样?

5 个答案:

答案 0 :(得分:2)

  1. 您需要jython来运行测试,这意味着您需要安装jython来运行测试。
  2. 导入Java库时无需采取特殊措施。
  3. 您需要告诉jybot在哪里可以找到Java库或类。
    jybot --pythonpath <the_path_to_your_java_classes> your_tests
    //e.g.   
    jybot --pythonpath c:/test-project/target/classes  your_tests

答案 1 :(得分:1)

我也参与过同样的项目,需要通过机器人框架调用Java类。以下是导入Java库的简短示例:

档案myJavaLibrary.java

public class myJavaLibrary{

    public void my_java_add(int i, int j, int k) {
        if(i+j == k)
            return;
        System.out.println("Invalid Sum");
        assert false;
    }

}

使用命令:javac myJavaLibrary.java

这将在同一目录中创建一个.class文件:myJavaLibrary.class

在机器人文件中导入:

文件:test.robot.txt

*** Settings ***

Library       myJavaLibrary.java

*** Test Cases ***

User defined Java Test

    My Java Add     5   7   12

您可能会注意到myvavaLibrary.java库已添加到设置部分,因为机器人文件与.class文件位于同一目录中。您可以添加相同的绝对路径。

您可能需要安装jython才能运行机器人文件。

最后使用命令:

jython -m robot test.robot.txt。

最终输出可以在运行文件夹

中的 log.html 文件中看到

对于JAR导入:

环境变量中包含.jar文件的绝对路径:

变量名称:CLASSPATH

变量值:&#34;包含Jar&#34; \ *;的目录的绝对路径

在这种情况下,该过程与运行机器人文件相同,并且不需要包含任何库。

希望这有效。

参考:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html

答案 2 :(得分:0)

你必须使用jython(jybot)。还有其他设置,如JYTHONPATH。

答案 3 :(得分:0)

我知道了!

============= env ================

********** Sys Window 10

首先,您需要安装jdk,jython,robot框架

(PS:jython不需要python2.7或其他python sdk。)

**********对于整体

jdk我使用一个拉链。

jython我使用安装程序jar 2.7.2b3,双击并使用安装所有模型。

机器人,我使用master下载master代码zip,然后使用“ jython setup.py install”

我没有在Windows系统ENV“ PATH”中添加“ CLASSPATH”,稍后再说原因。

我刚刚将D:\ Tools \ jython2.7 \ bin添加到Windows System ENV“ PATH”中。

D:\Tools\jython2.7\bin 的目录
2020/03/01  01:29    <DIR>          .
2020/03/01  01:29    <DIR>          ..
2020/03/01  01:29               417 chardetect-script.py
2020/03/01  01:29            74,752 chardetect.exe
2020/03/01  01:27           102,772 easy_install-2.7.exe
2020/03/01  01:27           102,772 easy_install.exe
2020/02/02  11:30         3,979,302 jython.exe
2020/02/02  11:30               282 jython_regrtest.bat
2020/03/01  01:28           102,754 pip.exe
2020/03/01  01:28           102,754 pip2.7.exe
2020/03/01  01:28           102,754 pip2.exe
2020/03/01  01:29               428 rebot-script.py
2020/03/01  01:29            74,752 rebot.exe
2020/03/01  01:29               428 robot-script.py
2020/03/01  01:29            74,752 robot.exe

我们可以找到robot.exe,找不到jbot,因为它已经在Robot Framework 3.2b2上与机器人结合了,您可以从Robot Framework Github中进行检查以获取更多信息。

好的,我们的环境完成了。

检查!

********** SDK

C:\Users\65787>jython --version

Jython 2.7.2b3

C:\Users\65787>java -version

java version "1.8.0_231"

Java(TM) SE Runtime Environment (build 1.8.0_231-b11)

Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

C:\Users\65787>robot --version

Robot Framework 3.2b2 (Jython 2.7.2b3 on java1.8.0_231)

********** IDE:日食+红色编辑器

1。从elipce markplace下载红色编辑器并安装它。

2。在eclipce性能中配置robotframework-> robotframework ---> installe framework-> dicover(如果不起作用,可以在D:\ Tools \ jython2.7 \ bin中手动设置路径)

让我们解决您的问题。

===========准备一个Java jar =====================

0。为机器人框架准备一个jar或class / java文件!

这部分我用一个罐子。

1.new一个Maven项目-> robot-utils4j

2.new HelloWorld类

package org.mfm.robot.utils4j;

public class HelloWorld {
    public void hello(String name) {
        System.out.println("Hello, " + name + "!");
    }

    public void doNothing() {
    }

}

2.pom.xml

<groupId>org.mfm</groupId>
    <artifactId>robot-utils4j</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3。运行mvn clean程序包

4。得到一个罐子 目标目录中的robot-utils4j-1.0.0-jar-with-dependencies。

=============用Java jar运行机器人================

1。新建一个机器人项目

2.import库位于red.xml

在“ Refrenceed Library”视图中添加新库。

单击robot-utils4j-1.0.0-jar-with-dependencies库。

搜索org.mfm.robot.utils4j.HelloWorld

并单击

最后,结果将如下所示:

enter image description here

最好右键单击它标记为静态库。

3.new一个JavaHello.robot测试套件

JavaHello.robot

*** Settings ***   
Library    org.mfm.robot.utils4j.HelloWorld         

*** Test Cases ***
My Test
    Do Nothing
    Hello    world 

4。运行它,您将得到以下结果:

Command: jython.exe -J-Dpython.path=D:\Tools\jython2.7\Lib\site-packages -J-cp .;D:\AllWorkspace\lib\robot-utils4j-1.0.0-jar-with-dependencies.jar;D:\AllWorkspace\lib\/*.jar -m robot.run --listener C:\Users\65787\AppData\Local\Temp\RobotTempDir8138272493583159262\TestRunnerAgent.py:14246 --argumentfile C:\Users\65787\AppData\Local\Temp\RobotTempDir8138272493583159262\args_2df9cc70.arg D:\AllWorkspace\EWorkspace4Java\RobotDemo
Suite Executor: Robot Framework 3.2b2 (Jython 2.7.2b3 on java1.8.0_231)
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
==============================================================================
RobotDemo                                                                     
==============================================================================
RobotDemo.JavaHello                                                           
==============================================================================
My Test                                                               | PASS |
------------------------------------------------------------------------------
RobotDemo.JavaHello                                                   | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
RobotDemo                                                             | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output:  D:\AllWorkspace\EWorkspace4Java\RobotDemo\output.xml
Log:     D:\AllWorkspace\EWorkspace4Java\RobotDemo\log.html
Report:  D:\AllWorkspace\EWorkspace4Java\RobotDemo\report.html

此外,我使用redisson连接robot-utils4j-1.0.0-jar-with-dependencies中的redis集群。

1.code

robot-utils4j的代码:

package org.mfm.robot.utils4j;

import org.redisson.Redisson;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;

public class RedisClient {

        private static RedissonClient  instance = null; 

        /**
         * 获取连接redis的Session
         * @param clusterNodes "redis://127.0.0.1:7000", "redis://127.0.0.1:7001"
         * @param password abc123
         * @return
         */
        public RedissonClient getRedissonClient(String clusterNodes,String password) {
            Config config = new Config();
            config.useClusterServers()
                .setScanInterval(2000) 
                .setPassword(password)
                .addNodeAddress(clusterNodes.split(","));
            if(instance == null) {
                instance = Redisson.create(config);
            }
            return instance;
        }

        public static void main(String[] args) {
            RedisClient redisClient = new RedisClient();
            RedissonClient redissonClient = redisClient.getRedissonClient("redis://172.16.2.132:7001, redis://172.16.2.133:7002,redis://172.16.2.134:7003", "keplerredis");
            System.out.println(redissonClient+"连接成功。。。。");
        }

        public String getKey(String key) {
            RBucket<String> rvalue = instance.getBucket(key);
            System.out.println("获取key"+key+"的值"+rvalue.get());
            return rvalue.get();
        }

        public void setKeyValue(String key,String value) {
            RBucket<String> rvalue = instance.getBucket(key);
            System.out.println("获取key"+key+"的值"+rvalue.get());
            rvalue.set(value);
        }
}

2.import库位于red.xml

在“ Refrenceed Library”视图中添加新库。

单击robot-utils4j-1.0.0-jar-with-dependencies库。

搜索org.mfm.robot.utils4j.RedisClient

最好右键单击它标记为静态库。

3。创建机器人TestSutie

*** Settings ***
Library    org.mfm.robot.utils4j.RedisClient  

*** Test Cases ***
My Test
    ${connectResult}=    Get Redisson Client    redis://172.16.2.132:7001, redis://172.16.2.133:7002,redis://172.16.2.134:7003    keplerredis
    Log To Console    ${connectResult} 
  1. 运行

    ================================================ =============================== RobotDemo :: python.path
    ========================================= =========================== RobotDemo.RobotDemo
    ========================================= =========================== RobotDemo.RobotDemo.RedisDemoJava
    ========================================= =========================== 我的测试org.redisson.Redisson@10bdfbcc |通过| -------------------------------------------------- ---------------------------- RobotDemo.RobotDemo.RedisDemoJava |通过| 1个关键测试,1个通过,0个失败 总共1个测试,1个通过,0个失败 ========================================= =========================== RobotDemo.RobotDemo |通过| 1个关键测试,1个通过,0个失败 总共1个测试,1个通过,0个失败 ========================================= =========================== RobotDemo :: python.path |通过| 1个关键测试,1个通过,0个失败 总共1个测试,1个通过,0个失败 ================================================== =========================

答案 4 :(得分:0)

*************关于

图书馆A

库A.java

图书馆A.class

public class A{

    public void hello(String name) {
        System.out.println("Hello, " + name + "!");
    }

    public void doNothing() {
    }

}



*** Settings ***   
Library    A
#or Libary    A.java    this way is also ok 
#or Libary    A.class   this way is also ok 
#Both of these need javac A.java ,you need hava a A.class 

*** Test Cases ***
My Test
    Do Nothing
    Hello    world 

*************关于使用Java或类文件运行的机器人commont和jython

在同一目录中,您需要编译A.java

javac A.java

A.java

A.class

JavaHello.robot

运行命令

robot --pythonpath=. JavaHello.robot
#or
jython -Dpython.path=. -m robot.run JavaHello.robot
#or
jython -J-cp . -m robot.run JavaHello.robot

*************关于机器人公地和jython用广口瓶运行

jar-cvf my.jar A.class

获取my.jar

您可以运行它使用此通用命令,请注意

cd D:\AllWorkspace\EWorkspace4Java\RobotDemo\
D:
jython -J-cp D:\AllWorkspace\lib\my.jar -m robot.run JavaHello.robot

jython -Dpython.path=D:\AllWorkspace\lib\my.jar -m robot.run JavaHello.robot

jython -Dpython.path=D:\AllWorkspace\lib\/*.jar -m robot.run JavaHello.robot

robot --pythonpath=D:\AllWorkspace\lib\my.jar JavaHello.robot
robot --pythonpath=D:\AllWorkspace\lib\/*.jar JavaHello.robot

如果您在窗口环境“ PATH”中配置CLASSPATH = D:\ AllWorkspace \ lib \ my.jar

robot JavaHello.robot
jython  -m robot.run JavaHello.robot

关于JYTHONPATH PYTHONPAHT CLASSPATH

您可以从机器人框架github文档中获取更多信息和差异。

参考:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#pythonpath-jythonpath-and-ironpythonpath