20220901 自动化测试python接口总结
一、自动化测试分为 1、测试接口 2、测试用例 3 、测试模块
1、测试接口:
自动化测试的python接口为本次工作的重点,首先是测试接口的主程序(main),main中包含了自动化测试的所有命令头(cmd_head),包括SetPayload等,原理为,所有的命令行程序都是通过argparse来实现的,在main中有parser命令解释器,将所有argparse设置的选项作为parser的属性,所以在输入这些属性中的命令头时,就会执行相应的功能。如果不是设置的选项则会提示错误。然后在main中,还有建立连接并打开模块,断开连接等不需要opwill_cmd 的功能。
运行整个测试命令的流程为:输入命令(case:opwill_cmd)- >与server端建立socket连接 - >解析(main:opwill_cmd()) - > 执行命令相关的功能arg.func() -> 解析参数(从argument列表中匹配)执行相应函数 -> 函数改变配置的数据,相应的改变了数据结构的数据,使得配置文件改变,把新的配置文件通过send_commend函数发送消息到server端 -> server端的main.lua程序会接受消息,并且判断收到的消息类型,执行功能,如果收到的时send_cdnfigfile类似的发送文件的命令,则会对接受的数据进行重新编码,并读取配置文件,以在仪表界面上进行相应的改动 -> 如果server端有回应的消息,则由client端进行get命令,并且处理格式。然后返回值。-> 测试流程结束
测试接口还有一个比较核心的点在于配置文件,python本身没有结构体,想要按照c++的数据结构进行数据的改变需要用到ctype库。一个经典的ctype型的结构体为:
class structname(ApiStructure):
_fields_ = [('a', c_char*4),
('b', c_char*4),
('c', c_char*4),
('d', c_char*4),
('e', c_char*4)]
ApiStructure为Structure的重写,正常使用Structure即可。但是想要访问其中的变量还需要:
data = string_at(addressof("structname()"), sizeof(structname))
buff = create_string_buffer(data, sizeof(structname))
memmove(byref(structname()), cast(buff, POINTER(structname)), sizeof(structname()))
原理为,将这些变量名与ctype的数据类型建立映射关系,然后通过class来对该变量名进行访问
structname.a = 0
需要注意,python的ctype类型的’结构体‘默认是4字节对齐,所以有时会因为对齐而填充了一些空字符。比如:
class structname(ApiStructure):
_fields_ = [('a', c_ubyte),
('b', c_ubyte),
('c', c_ubyte),
('d', c_ubyte),
('e', c_ubyte),
('f', c_uint)]
一个c_ubyte是一个字节,一个c_uint是4个字节,总共应该是9个字节,但是sizeof之后得到的是12字节
如果需要修改字节对齐规则,只需要在_fields_上面加上_pack_ = 字节对齐
如:
class structname(ApiStructure):
_pack_ = 1
_fields_ = [('a', c_ubyte),
('b', c_ubyte),
('c', c_ubyte),
('d', c_ubyte),
('e', c_ubyte),
('f', c_uint)]
此时为1字节对齐,sizeof之后就是9字节
本文只为经验分享,如有不足请各位指正