单元测试参数化之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
发布了240 篇原创文章 · 获赞 77 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/dpl12/article/details/104226491