VPP测试框架简单分析

vpp的测试框架是在unittest的基础上编写的。只是重写unittest的一些类,然后测试用例在继承 测试框架类。

framework.py

这个是测试框架类,主要包含 所有测试用例都要继承的类VppTestCase,setUpClass、
setUp、tearDownClass tearDown等方法和 一些 对VPP操作比如 发包创建流等等

VppTestCase
继承了 unittest的 TestCase。之后编写的测试用例类都是继承自他

这里写图片描述

在原有的 TestCase的基础上做了哪些增加:

之后所有的测试用例中 等等需要对unittest方法重写的都进行了重写。
测试用例写的时候就写少部分,大部分共有的都抽出来放到 VppTestCase中
都是对VPP功能的操作。

setUpClass

在运行testcase之前执行类设置
删除共享内存文件,启动vpp并连接vpp -api
创建临时文件夹存储日志
配置VPP根据设置的系统参数进行运行
连接 vpp-api

setUp
每个测试用例执行前清除之前测试执行VPP产生的东西
清理环境

tearDownClass

输出到日志文件

VppTestRunner

VppTestRunner继承自 unittest.TextTestRunner类
属性 resultclass 用于返回测试结果 VppTestResult
调用了父类 TextTestRunner的构造方法

run
一个套件将测试用例添加进去。
这个就是执行加入测试套件里的测试用例
super(VppTestRunner, self).run(filtered)

然后 run_test执行传入参数 suite

这里写图片描述

简单分析下测试用例

test_ping.py

这里写图片描述

配置执行测试用例前的配置等,先调用VppTestCase类的 setUpClass方法。再创建两个接口,启动,配置

这里写图片描述

对接口开启捕获,开始包生成器,创建 ping命令

获取包的信息 断言判断是否包的信息与预期的符合

pg_enable_capture 等方法是从框架模块 framework中的 VppTestCase类中的

这里写图片描述

之后删除之前的配置恢复环境

test_ip4.py

同样是先进行配置

这里写图片描述

test_fib

这里写图片描述

大致流程都是如上
创建流,包,添加到接口。启用捕获,发包,验证包的信息
create_stream创建流的方法 就在 test_ip4里面

创建一个 报文 源目的 数据等

在接口开启捕获

     self.pg_enable_capture(self.pg_interfaces)
        self.pg_start()

然后获取包,

获取数据包并验证

pkts = self.pg0.get_capture()
        self.verify_capture(self.pg0, pkts)

验证方法也在 test_ip4中

这里写图片描述

test_1_add_routes及 VPP-API流程

增加100个路由

配置路由进去

这里写图片描述

config_fib_many_to_one方法里面是使用的 vpp-api来操作

这里写图片描述

self.vapi.ip_add_del_route(
                    dest_addr, dest_addr_len, next_hop_address)

这里写图片描述

在 框架中 framework 中

cls.vapi = VppPapiProvider(cls.shm_prefix, cls.shm_prefix, cls)

这里写图片描述

而 VppPapiProvider 是从 vpp_papi_provider 导入
这里写图片描述

这个是提供 vpp-api的

其中导入了 vpp-api模块

这里写图片描述
一些对 vpp-api的使用可以查看 vpp_papi_provider

调用的方法 ip_add_del_route 在 vpp_papi_provider中

这里写图片描述

封装了很多方法

这里写图片描述

如何编写一个新的测试用例

增加的测试用例要以 test_开头才可以,且里面的类要继承 VppTestCase

默认参考文档写的测试用例只能使用 make test /retest等部分或者全部运行才能一起运行

要让其测试用例可以单独执行,可以增加

导入 unittest

from framework import VppTestCase, VppTestRunner

然后在下面

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

既可使用 make test-shell命令进行单独执行或者直接执行

这里写图片描述

具体编写主要参考测试用例编写文档

https://docs.fd.io/vpp/17.04/vpp_make_test/html/overview.html#example-how-to-add-a-new-test

而且所有的测试用例都可以按照 unittest的方法执行,
测试用例的执行需要很多环境变量需要去Makefile文件中查看。make 参数命令可以,不使用的话就要自己去配置环境变量。

猜你喜欢

转载自blog.csdn.net/qq_28295425/article/details/78626525