Robot Framework如何使用C语言编写测试库

简介: 介绍这里通过一个简单的例子,演示如何在Robot Framework 的测试库中使用C语言。我们使用Python标准库中的ctypes模块(对于早期Python版本可能未集成,需要另行安装),该模块需要调用C代码编写的共享库。

介绍

这里通过一个简单的例子,演示如何在Robot Framework 的测试库中使用C语言。我们使用Python标准库中的ctypes模块(对于早期Python版本可能未集成,需要另行安装),该模块需要调用C代码编写的共享库。当前的例子我仅在OSX上实现与测试,对于Unix和Linux平台大同小异,对于Windows平台,仅仅需要注意共享库的格式和调用方式即可,当前未做其他平台相关测试。

共享库

第一步,我们需要编写C的共享库。

我们编写的例子是一个非常简单的登录系统(login.c), 通过输入的用户名和密码进行验证,并返回验证结果。这里有两组合法的用户名密码组合:demo/mode和john/long.其他组合都是错误的。下面是login.c的完整代码:

/*
Simple system that validates passwords and user names. There are two users in
system with valid user name and password. "demo mode" and "john long". All
other user names are invalid. Except that there are bugs. Can you spot them?
*/

#include <string.h>
#define NR_USERS 2

struct User {
    const char* name;
    const char* password;
};
const struct User VALID_USERS[NR_USERS] = { "john", "long", "demo", "mode" };

int validate_user(const char* name, const char* password) {
    int i;
    for (i = 0; i < NR_USERS; i++) {
        if (0 == strncmp(VALID_USERS[i].name, name, strlen(VALID_USERS[i].name)))
            if (0 == strncmp(VALID_USERS[i].password, password,     strlen(VALID_USERS[i].password)))
                return 1;
    }
     return 0;
}

我们将这个文件编译成共享库liblogin.so. 在当前目录下,我们创建Makefile文件。
Makefile编写如下:

CC=gcc
SRC=login.c
SO=liblogin.so

$(SO): $(SRC)
    $(CC) -fPIC -shared -o $(SO) $(SRC)

clean:
    rm -f $(SO)

我们在当前目录执行make命令,就创建了共享库liblogin.so.
后面我们将介绍如何编写Robot Framework测试库来调用我们的C共享库。

测试库

在这里,我们按照Robot框架的规范,来编写测试库LoginLibrary.py. LoginLibrary是一个简单的测试库,通过ctypes模块来与底层的C共享库进行交互。我们这个库仅仅提供了一个关键字就是 Check User.

下面是LoginLibrary.py的完整代码:

"""Robot Framework test library example that calls C code.

This example uses Python's standard `ctypes` module, which requires
that the C code is compiled into a shared library.

It is also possible to execute this file from the command line 
to test the C code manually.
"""

from ctypes import CDLL, c_char_p

LIBRARY = CDLL('./liblogin.so')  # On Windows we'd use '.dll'


def check_user(username, password):
    """Validates user name and password using imported shared C library."""
    if not LIBRARY.validate_user(c_char_p(username), c_char_p(password)):
        raise AssertionError('Wrong username/password combination')


if __name__ == '__main__':
    import sys
    try:
        check_user(*sys.argv[1:])
    except TypeError:
        print 'Usage:  %s username password' % sys.argv[0]
    except AssertionError, err:
        print err
    else:
        print 'Valid password'

if __name__ == '__main__' 语句块不是用于测试库的,我们在这里写是为了方便测试测试库,我们可以执行如下的测试命令:

python LoginLibrary.py demo mode
python LoginLibrary.py demo invalid

来验证我们的测试库编写是否正确,不过对于正式的测试库,我们需要进行单元测试utest和验收测试atest.这里就不做过多介绍了。编写好测试库以后,我们就可以利用测试库提供的关键字编写用例了。

测试用例

我们按照Robot框架的规范,编写测试用例login_tests.robot, 用例完整代码如下所示:

*** Settings ***
Library           LoginLibrary.py

*** Test Case ***
Validate Users
    [Template]    Check Valid User
    johns    long
    demo     mode

Login With Invalid User Should Fail
    [Template]    Check Invalid User
    de          mo
    invalid     invalid
    long        invalid
    ${EMPTY}    ${EMPTY}

*** Keyword ***
Check Valid User
    [Arguments]    ${username}    ${password}
    Check User    ${username}    ${password}

Check Invalid User
    [Arguments]    ${username}    ${password}
    Run Keyword And Expect Error    Wrong username/password combination    Check    User    ${username}    ${password}

我们的测试集包含了所有的测试情况,包括独立的有效登录测试和无效登录测试。
注意,尽管我们的测试用例文件以显示的.robot扩展结尾,它实际上也是文本文件。我们以.txt结尾,Robot框架同样可以执行。用例编写完了,我们开始执行测试用例。

执行测试

首先要确保已经安装了Robot Framework了,这里我就不介绍怎么安装了,相信大家应该都安装成功了。通过pybot --version查看即可。

我们在控制台上输入如下命令,执行测试:

>pybot login_tests.robot

pybot命令有很多参数可选,这里为了方便,我们就选用默认即可。

执行结果如下:

==============================================================================
Login Tests                                                                   
==============================================================================
Validate Users                                                        | PASS |
------------------------------------------------------------------------------
Login With Invalid User Should Fail                                   | PASS |
------------------------------------------------------------------------------
Login Tests                                                           | PASS |
2 critical tests, 2 passed, 0 failed
2 tests total, 2 passed, 0 failed
==============================================================================
Output:  ../output.xml
Log:     ../log.html
Report:  ../report.html

通过查看输出的html日志和报告文件,我们可以查看用例的执行情况。

至此,我们就简单的介绍完了如何在Robot Framework测试库中调用C库的用法。

目录
相关文章
|
13天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
ly~
|
29天前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
95 4
|
1月前
|
C语言
【C语言的完结】:最后的测试题
【C语言的完结】:最后的测试题
19 3
|
11天前
|
资源调度 前端开发 JavaScript
React 测试库 React Testing Library
【10月更文挑战第22天】本文介绍了 React Testing Library 的基本概念和使用方法,包括安装、基本用法、常见问题及解决方法。通过代码案例详细解释了如何测试 React 组件,帮助开发者提高应用质量和稳定性。
21 0
|
30天前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
3月前
|
机器人 测试技术 Python
作为测试人员,RobotFramework框架真的是必须掌握的吗?
本文探讨了Robot Framework(RF)作为自动化测试框架的重要性,指出虽然RF具有易用性和灵活性,但并非测试人员必须掌握的工具,因为存在许多可替代的自动化测试解决方案。
52 0
作为测试人员,RobotFramework框架真的是必须掌握的吗?
|
3月前
|
C语言
C语言中的math库概述
C语言中的math库概述
|
3月前
|
关系型数据库 MySQL Python
[python]使用faker库生成测试数据
[python]使用faker库生成测试数据
|
3月前
|
测试技术 开发工具 Python
在Jetson Nano上编译 pyrealsense2库包,并在Intel的tof相机上进行测试
在Jetson Nano上编译 pyrealsense2库包,并在Intel的tof相机上进行测试
126 0
|
3月前
|
存储 Serverless C语言
C语言中的标准库函数
C语言中的标准库函数
52 0
下一篇
无影云桌面