自动化测试程序之二模拟触摸屏点击事件和滑动事件(C语言)

一、测试程序编写说明
终端设备上运行的是LINUX+QT应用程序,使用触摸屏进行人机交互。经过测试人员长时间的人机交互测试,来确认系统的功能是否满足需求后。现在需要编写一个自动化的测试程序模拟触摸屏点击事件和滑动,并能够按照测试人员预设的脚本执行,比如在屏幕的某个位置需要点击某个按钮,或是屏幕或是列表需要滑动,并且这一个或几个动作需要连续执行10000次或更多。通过这样的自动测试,可以减轻测试人员的负担,还可以查看画面按钮触发N次后,画面执行N次后的系统的稳定性,如内存使用率(内存是否泄漏),cup使用率(负载是否很高)等等。

二、测试程序的结构分析

根据上述的简单要求,先分析测试程序的基本逻辑结构是程序通过读脚本中动作以及坐标来执行。
脚本文件以TXT文本形式记录,
P表示点击操作,P x y 3000:点击(x,y)点后等待3000毫秒做下一个动作
S表示滑动操作,S x1 y1 x2 y2 2000:从(x1,y1)点滑动到(x2,y2)点,等待2000毫秒做下一个动作
当前只支持垂直或是水平匀速滑动。(屏幕任意两点的滑动暂时不支持)
R表示重复,R Rounds Ln:表示以下Ln行重复Rounds次,该指令是可选的,如果不写顺序执行脚本。
脚本文本文件示例如下:
——–Sample1.txt————–

R 15000 2
P 973 545 1000 goButton
P 630 750 1000 BackButton

表示点击两个按钮,这两个点击按钮动作循环执行15000次,每次点击指定的坐标后,等待1000毫秒。

——–Sample2.txt————–

R 10000 2
S 200 300 801 300 5000 SlidingLeftToRight
S 800 100 202 100 5000 SlidingRightToLeft

表示在当前页面左右滑动,先由点(200,300)水平向右滑动到点(801,300),sleep 5秒,再由点(800,100)水平向左滑动懂点(202,100),sleep 5秒。

三、测试程序实现主要逻辑
1、定义链表结构

typedef struct List  
{  
    int  operIndex;
    char operation;
    int  microseconds; //微秒数
    int  i_StartX;   //点击的X坐标,或是滑动的开始点X坐标
    int  i_StartY;   //点击的Y坐标,或是滑动的开始点Y坐标
    int  i_EndX;     //滑动的结束点X坐标
    int  i_EndY;     //滑动的结束点Y坐标
    int  i_repeatCnt;//重复的次数
    int  i_repeatLine;//以下动作重复的行数
    FLAG c_flag;// HEADER or  Member
    char str_note[200]; //动作说明
    struct List *nextGp; //指针域  
    struct List *repeatStart;//设定重复的头的位置

}List;  
List *oprtData_Set;

2、上报输入事件(input_event)

int reportkey(int fd, uint16_t type, uint16_t code, int32_t value)  
{  
    struct input_event event;  

    event.type = type;  
    event.code = code;  
    event.value = value;  

    gettimeofday(&event.time, 0);  

    if (write(fd, &event, sizeof(struct input_event)) < 0) {  
        printf("report key error!\n");  
        return -1;  
    }  

    return 0;  
}  

3、尾插法构造动作序列的链表

void TailCreatList(List *L,char * fname)  //尾插法建立链表  
{  
    List *tmpData;
    List *tail ;
    List *pRepeatHeader;  
    int i_repeatCnt = 0;
    int i_repeatLines = 0;
    char c_repeatID;
    REPEAT flag = NoRepeatPos; //
    char buffer[512];
    char c_Oper_temp;
    FILE *infile;
    infile=fopen(fname,"r");
    int index=0;

    tail=L;  //NULL
    pRepeatHeader=tail->nextGp;//NULL

    if(infile==NULL)
    {
        printf("\nFailed to open the file : %s \n",fname);
        exit(0);
    }
    
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值