用Python 写一个用于芯片自动化测试的管理小框架

      芯片的测试有上千条用例,如果每条都是手动执行的话,在芯片版本迭代的过程中将会耗费大量的人力,所以采用芯片的自动化测试来代替繁重的体力劳动。

但是网上的一些工具适合做测试用例管理的要收费,不收费的功能又不太适合,选了几天,没找到合适的,于是决定用Python自己实现一个简单易用并且可行的管理工具。

选择Python是因为现在做芯片验证自动化的主流语言是Python,而且它功能强大。废话不多说,先来介绍一下自动化测试的需求。

 

1、能够通过串口或者网口连接到远端的机器,这里我采用的是PC通过网口连接远端的一个linux系统的host,通过串口连接另外一台嵌入式开发板。

这个网口和串口的Python脚本可以参考我之前的文章,由于我这里要说的自动化的管理框架不关心和远端的连接,所以这里不再对串口和网口进行详细说明。

 

2、运行一个main.py的主程序,它会打开一个本地的html文件,然后在浏览器端出现一个可视化的选择窗口,你可以根据你的测试需要选择你要进行自动化的用例,然后提交后自动的执行。如下图

如图,可以点击全选和全不选,还有指定某几项选中或者某几项不选中。选择好了以后,点击提交前的方框,自动化测试用例集就会自动的开始运行了,运行的过程中会输出结果到一个excel表格中。如下图

代码实现如下,在test.py 中只关注输出结果到excel的那句调用就好了,其它的代码都不重要。


#!/usr/bin/python3

# _*_coding:UTF-8 _*_

import time
from op_excel import out_result_to_excel

def test1():
    out_result_to_excel(1, "水仙花数的遍历", 'true')

def test2():
    out_result_to_excel(2,"打印当前时间的值", 'true')

def test3():
    out_result_to_excel(3, "成绩等级打印", 'true')

def test4():
    out_result_to_excel(4,"打印当前时间的值", 'true')

 

现在看看html的内容,主要是checkbox和提交的按键的ui布局,以及全选和全不选,或者指定几项的选择的功能实现。只贴代码,如下:

<body>
    <div class="wrap">
        <table>
            <thead>
                <tr>
                    <th>
                        <input type="checkbox" id="theadInp" />
                    </th>
                    <th>用例ID</th>
                    <th>用例名</th>
                    <th>
                    <input type="checkbox" id="submit1" />
                    </th>
                    <th>提交</th>
                </tr>
            </thead>
            <tbody id="tbody">
                <tr>
                    <td>
                        <input id="1" type="checkbox" />
                    </td>
                    <td> 1 </td>
                    <td>发送一个报文</td>
                </tr>
                <tr>
                    <td>
                        <input id="2" type="checkbox" />
                    </td>
                    <td> 2 </td>
                    <td>接收一个报文</td>
                </tr>
                <tr>
                    <td>
                        <input id="3" type="checkbox" />
                    </td>
                    <td> 3 </td>
                    <td>发送完成中断</td>
                </tr>
                <tr>
                    <td>
                        <input id="4" type="checkbox" />
                    </td>
                    <td> 4 </td>
                    <td>接收完成中断</td>
                </tr>
            </tbody>
        </table>
    </div>

</body>


<style>
    * {
        padding: 0;
        margin: 0;
    }

    .wrap {
        width: 300px;
        margin: 100px auto 0;
    }

    table {
        border-collapse: collapse;
        border-spacing: 0;
        border: 1px solid #c0c0c0;
        width: 300px;
    }

    th,
    td {
        border: 1px solid #d0d0d0;
        color: #404060;
        padding: 10px;
    }

    th {
        background-color: #09c;
        font-size: 16px;
        color: #fff;
    }

    td {
        font-size: 14px;
    }

    tbody tr {
        background-color: #f0f0f0;
    }

    tbody tr:hover {
        cursor: pointer;
        background-color: #fafafa;
    }
</style>


<script>
    window.onload = function () {
        var topInp = document.getElementById("theadInp");
        var tbody = document.getElementById("tbody");
        var botInpArr = tbody.getElementsByTagName("input");
        var submit1 = document.getElementById("submit1");

        //绑定事件
        topInp.onclick = function () {
            for (var i = 0; i < botInpArr.length; i++) {
                botInpArr[i].checked = this.checked;
            }
        }
        for (var i = 0; i < botInpArr.length; i++) {
            botInpArr[i].onclick = function () {
                //定义一个标识是true还是false的变量
                //默认它为true
                var bool = true;
                //检测每一个input的checked属性值。只要有一个没有check√,全选的check就得是false
                for (var j = 0; j < botInpArr.length; j++) {
                    if (botInpArr[j].checked == false) {
                        bool = false;
                    }
                    
                }
                topInp.checked = bool;
            }
        }
    }

</script>

 

下面用Python对html的内容进行解析,主要就是获取网页里的checked box的ID,然后加入到列表里面,然后调用python脚本的执行命令,执行对应的自动化测试用例程序。代码如下:

#!/usr/bin/python3
# _*_coding:UTF-8 _*_

import re
import os
from time import sleep
from selenium import webdriver
from comm_interface import *
from test import *

def get_check_result(list_all):
    l=[]
    for i in range(len(list_all)):
        s = driver.find_element_by_id(list_all[i]).is_selected()
        if s == True:
            #print(list_all[i])
            l.append(list_all[i])
    return l

if __name__ == '__main__':
    flag_ui=1
    list_all=[ 'test1','test2','test3','test4' ]# should be the same with the id in html
    checked_list=[]
    init()
    filename=create_xls_file()
    driver = webdriver.Chrome()#driver = webdriver.Firefox()
    #driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
    driver.get(r"file:///C:/work/auto_test_local/test_.html")
    while True:
        if True == driver.find_element_by_id('submit1').is_selected():
            checked_list = get_check_result(list_all)
            break

    if flag_ui == 0:
        test_table = [ 
        'test1',
        'test2',
        'test3',
        'test4'
        ]
    else:
        test_table = checked_list

    for i in range(1, len(test_table) + 1):
        cmd='test'+str(i)
        print("==================2秒后开始执行用例 %s ==============\n" % test_table[i-1])
        sleep(1)
        eval(cmd)()
        print("================== 执行用例 %s 完成 =================\n" % test_table[i-1])

    store_copy_excel()
    uninit()

下面是对测试结果输出到excel的代码:

#!/usr/bin/python3
# _*_coding:UTF-8 _*_

from xlutils.copy import copy
import xlrd
import xlwt
import time

def create_xls_file():
    filename='test.xls'
    row0 = [u'测试ID',u'测试用例名',u'时间',u'测试结果']
    workbook = xlwt.Workbook(encoding='utf-8')
    sheet1 = workbook.add_sheet("sheet1")
    workbook.save(filename)
    oldWb = xlrd.open_workbook(filename)
    newWb = copy(oldWb)
    sheet_name = newWb.get_sheet(0);
    for i in range(0, len(row0)):
        sheet_name.write(0, i, row0[i]);#写入 2行4列写入pass
    newWb.save(filename)
    return filename

def out_result_to_excel(idno,name,result):
    l=[]
    l.append(idno)
    l.append(name)
    timenow = time.strftime("%Y%m%d-%X",time.localtime())
    l.append(timenow)
    l.append(result)
    oldWb = xlrd.open_workbook("test.xls");#先打开已存在的表
    newWb = copy(oldWb)#复制
    newWs = newWb.get_sheet(0);#取sheet表
    for i in range(0, len(l)):
        newWs.write(idno, i, l[i]);#写入 2行4列写入pass
    newWb.save("test.xls")


def store_copy_excel():
    oldWb = xlrd.open_workbook("test.xls");#先打开已存在的表
    newWb = copy(oldWb)#复制
    newWs = newWb.get_sheet(0);#取sheet表
    filename = time.strftime("%Y%m%d",time.localtime())
    filename='test_result_'+filename+'.xls'
    newWb.save(filename)
    #newWb.del('test.xls')

注:本测试都是在Ubuntu环境下进行测试的,相关的一些库需要自己安装

geckodriver  linkage:    https://npm.taobao.org/mirrors/geckodriver

pip3 install xlutils

pip3 install xlrd

pip3 install copy

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
芯片测试平台使用Python编程语言的原因是多方面的。首先,Python是目前芯片验证自动化的主流语言,它具有广泛的应用和强大的功能。其次,Python语言具有简单易学的特点,其语法结构清晰且易于阅读,使得开发人员能够更快速地编和调试代码。此外,Python还拥有丰富的第三方库和工具,可以提供丰富的测试功能和自动化框架,方便开发人员进行芯片测试的相关工作。 对于自动化测试的需求,芯片测试通常包含上千条用例。如果每条用例都采用手动执行的方式,将会消耗大量的人力和时间,而且容易出现错误。因此,采用芯片自动化测试方法可以有效地解决这个问题,提高测试效率和准确性。通过编Python脚本,可以实现自动执行测试用例、记录测试结果、生成报告等功能,大大简化了测试流程。 在芯片测试平台中,还需要使用一些工具和驱动程序来实现与硬件设备的通信和控制。一个常用的工具是geckodriver,它是Firefox浏览器的驱动程序,用于模拟浏览器行为。通过geckodriver,可以在Python脚本中实现对浏览器的操作,比如打开网页、填表单等,方便进行一些与界面相关的测试。 综上所述,芯片测试平台使用Python编程语言,能够满足芯片测试的需求,并提供强大的功能和丰富的工具支持。通过自动化测试,可以节省人力和时间成本,提高测试效率和准确性,是芯片测试工作中不可或缺的一部分。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值