单元测试参数化之XML格式

XML是什么?

概念:XML是一种标记语句,很类似HTML标记语言;后缀 .xml

1.XML与HTML区别?

XML是传输和存储数据,焦点在数据;HTML是显示数据,焦点在外观;

2. XML格式是什么?

<?xml version="1.0" encoding="UTF-8"?>
<book category="面授">
      <title>单元测试</title> 
      <author>XST</author> 
      <year>2008</year> 
      <price>39.95</price> 
</book>

1. 必须有XML声明语句:<?xml version="1.0" encoding="UTF-8"?>
2. 必须要有一个根元素,如:<book>
3. 标签大小写敏感
4. 属性值用双引号
5. 标签成对
6. 元素正确嵌套
7. 标签名可随意命名,但有以下限制
    1) 不能以数字或者标点符号开始参
    2)不能以字符 “xml”(或者 XML、Xml)开始
    3) 名称不能包含空格

3.需求

对三角形案例单元测试使用XML格式进行参数化

4.操作步骤

1. 编写XML数据文件
2. 编写读取XML模块函数
3. 单元测试模块中引用XML读取函数
4. 执行

5.重点分析

1. 导入XML包 from xml.dom import minidom
2. 加载解析 dom=minidom.parse(filename)
3. 获取对象  root=dom.documentElement
4. 获取子元素 aas=root.getElementsByTagName(one)[0]
5. 获取子元素值 aas.getElementsByTagName(two)[0].firstChild.data

6.XML-缺点

缺点:不适合大量参数化数据时使用  

代码如下:

(1)xml数据-sjx.xml

<?xml version="1.0" encoding="UTF-8" ?>
<SJX>
    <bian>
        <b1>2</b1>
        <b2>3</b2>
        <b3>4</b3>
        <expect>普通三角形</expect>
    </bian>
    <bian>
        <b1>2</b1>
        <b2>2</b2>
        <b3>2</b3>
        <expect>等边三角形</expect>
    </bian>
    <bian>
        <b1>2</b1>
        <b2>2</b2>
        <b3>3</b3>
        <expect>等腰三角形</expect>
    </bian>
        <bian>
        <b1>2</b1>
        <b2>3</b2>
        <b3>2</b3>
        <expect>等腰三角形</expect>
    </bian>
        <bian>
        <b1>3</b1>
        <b2>2</b2>
        <b3>2</b3>
        <expect>等腰三角形</expect>
    </bian>
        <bian>
        <b1>3</b1>
        <b2>2</b2>
        <b3>1</b3>
        <expect>不是三角形</expect>
    </bian>
        <bian>
        <b1>1</b1>
        <b2>2</b2>
        <b3>3</b3>
        <expect>不是三角形</expect>
    </bian>
        <bian>
        <b1>2</b1>
        <b2>3</b2>
        <b3>1</b3>
        <expect>不是三角形</expect>
    </bian>
</SJX>

(2)读取xml数据的文件-read_xml.py

#导入XML包
from xml.dom import minidom

class Read_Xml():
    def readXml(self,node,num,nodeClild):
        #解析xml文档
        dom=minidom.parse("../data/sjx.xml")
        #获取对象
        root=dom.documentElement
        #获取bian元素
        element=root.getElementsByTagName(node)[int(num)]
        #获取指定bian子元素,如b1
        return element.getElementsByTagName(nodeClild)[0].firstChild.data
    def get_len(self,node):
        #解析xml文档
        dom=minidom.parse("../data/sjx.xml")
        #获取文档对象
        root=dom.documentElement
        #获取bian元素
        return len(root.getElementsByTagName(node))

if __name__ == '__main__':
    print(Read_Xml().readXml("bian",0,"b3"))

(3)判断三角形的类sjx.py

class Sjx():
    def sjx(self,a,b,c):
        # 判断是否为三角形
        if a+b>c and a+c>b and b+c>a:
            # 判断是否为等边三角形
            if a==b and b==c:
                return "等边三角形"
            elif a==b or a==c or b==c:
                return "等腰三角形"
            else:
                return "普通三角形"
        else:
            return "不是三角形"
# if __name__ == '__main__':
#     print(Sjx().sjx(2,3,4))

(4)测试类test_xml.py

import unittest
from Unittest.code.sjx import Sjx
from Unittest.read_data.read_xml import Read_Xml
#实例化三角形
sjxClass=Sjx()
#实例化读取xml类▲▽
readXmlClass=Read_Xml()
class Test_Xml(unittest.TestCase):
    def test1(self):
        for i in range(readXmlClass.get_len("bian")):
            #目的测试三角形程序
            result=sjxClass.sjx(int(readXmlClass.readXml("bian",i,"b1")),
                                int(readXmlClass.readXml("bian",i,"b2")),
                                int(readXmlClass.readXml("bian",i,"b3")))
            #添加断言,判断三角形程序返回的结果是否符合我们的预期结果
            self.assertEqual(result,readXmlClass.readXml("bian",i,"expect"))
            print(readXmlClass.readXml("bian",i,"b1"),
                  readXmlClass.readXml("bian",i,"b2"),
                  readXmlClass.readXml("bian",i,"b3"),
                  readXmlClass.readXml("bian",i,"expect"),
                  "-->验证通过")

运行结果: 

Launching Nosetest with arguments D:\Program Files\PyCharm\PyCharm 2017.2.3\helpers\pycharm\_jb_nosetest_runner.py E:/pythonProject/Unittest/unittest/test_xml.py in E:\pythonProject\Unittest\unittest
2 3 4 普通三角形 -->验证通过
2 2 2 等边三角形 -->验证通过
2 2 3 等腰三角形 -->验证通过
2 3 2 等腰三角形 -->验证通过
3 2 2 等腰三角形 -->验证通过
3 2 1 不是三角形 -->验证通过
1 2 3 不是三角形 -->验证通过
2 3 1 不是三角形 -->验证通过
.
----------------------------------------------------------------------
Ran 1 test in 0.047s

OK

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值