封装App

App类概述

App类是QT4C中的应用程序基类模块,它可以理解为提供一个特定功能的软件,一般来说可能是对应操作系统的一个进程、一个线程、或者多个进程集合。App类提供了Windows上应用程序的部分相关功能,包括退出程序、退出所有应用程序等等。

App类封装

App基类中维护了一个记录所有打开的应用程序的列表,并且提供了一些静态方法来对当前记录的所有应用程序进行操作,如App.quitAll()退出所有应用程序,更多使用方法可查看 qt4c.app.App 进行查看。

我们以Windows系统自带的计算器为例,你可以在demolib/calcapp.py封装你的测试基类CalcApp,实现App类所需的基本功能,用法参考如下:

# -*- coding: utf-8 -*-

from qt4c.app import App
import subprocess, time

class CalcApp(App):
    '''计算器App
    '''
    def __init__(self):
        App.__init__(self)
        self._process = subprocess.Popen('calc.exe')

    def quit(self):
        self._process.kill()
        App.quit(self)

上述代码实现了最基本的功能,你可以根据需要去定义更多的接口。__init__函数中需要实现应用程序的启动,这里我们通过subprocess启动一个calc.exe的子进程并获取其pid。而quit函数中需要实现程序退出。

警告

重载quit函数时,必须显示调用基类的函数,以通知基类该程序退出。

App类自定义接口

可能上面demo实现的基本功能无法满足你的需求,你可以自定义一些操作,然后自行实现。例如我们希望在实例化App之后直接调用App进行计算,那么可以修改如下:

# -*- coding: utf-8 -*-
from qt4c.app import App
import subprocess, time


class CalcApp(App):
    '''计算器App
    '''

    def __init__(self, cmd, params=[]):
        App.__init__(self)
        params.insert(0, cmd)
        self._process = subprocess.Popen(params)

    @property
    def ProcessId(self):
        return self._process.pid

    def quit(self):
        self._process.kill()
        App.quit(self)

    def calculate(self, expression, expect_value):
        '''计算表达式并比较运算结果
        '''
        pass

之后我们可以通过调用calculate方法来直接进行计算:

calcapp = CalcApp('calc.exe')
calcapp.calculate('3*3', 9)

App类使用

在测试用例中,实例化一个被测应用程序,参考如下:

from demolib.calcapp import CalcApp
calc = CalcApp()

实例化之后,我们就可以看到一个计算器进程被启动。