在做自动化测试断言失败时,如何成功打印中文字符。

在做自动化测试断言失败时,如何成功打印中文字符。

 

       因为刚学习python,很多编码问题不是很明白,因此在断言失败时,不能成功打印中文字符困扰了我很久,我在网络上也找了很多的方案,也是无法解决我的问题。


       突然灵光一闪,尝试改变一下中文的编码写法,于是解决了我的问题,但是我不知道其中原因,后来我请教了大神,大神推荐了一篇文章解决了我的疑惑。下面我来讲讲我遇到的问题和我是如何解决的,以及解决我疑惑的文章。下面是我的解决思路:


       1、一开始我想要打印的中文字符串是存在msgs2里面的,编写代码是这样写的: 

       msgs2=u"审核失败,返回的数据:"+product_verify_response.text

self.assertEqual(productVerifymsg,msgAssert, msgs2) 


在做自动化测试断言失败时,如何成功打印中文字符。


      2、断言成功把msgs2的信息打印出来,但是呢,却不是utf-8编码的中文字符。

      3、于是我就百度,很多方案都说要encode或decode,于是我又修改代码,代码如下: 

           self.assertEqual(productVerifymsg,msgAssert, msgs2.encode(‘utf-8’))

          或

          self.assertEqual(productVerifymsg,msgAssert, msgs2.decode(‘utf-8’)) 


        4、是的,上面的写法没有解决我的问题。于是我又花了很久的时间找原因,还是没有找到;

       5、终于在某一时刻,灵光一现,把代码修改一下,代码如下:

 msgs1="审核失败,返回的数据:"+product_verify_response.text

self.assertEqual(productVerifymsg,msgAssert,msgs1)

在做自动化测试断言失败时,如何成功打印中文字符。


6、虽然还未完全成功,但是呢,感觉成功了一半;

7、再次修改一下代码:

 msgs1="审核失败,返回的数据:"+product_verify_response.text.encode(‘utf-8’)

self.assertEqual(productVerifymsg,msgAssert,msgs1) 

在做自动化测试断言失败时,如何成功打印中文字符。
        

     8、终于解决了,但是我没有理解其中原因,疑问如下图:

在做自动化测试断言失败时,如何成功打印中文字符。

    

       9、大神推荐的解决办法,转载于:http://lovesoo.org/python-codec-details-encode-and-decode.html,文章如下:


Python编解码详解_encode与decode

Python内部,字符串使用unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gbk'),表示将gbk编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gbk'),表示将unicode编码的字符串str2转换成gbk编码。

因此,转码的时候一定要先搞明白,字符串str究竟是什么编码格式,先decode成unicode,再encode成其他编码。

其中,常见编码格式如下:

GB2312编码:适用于汉字处理、汉字通信等系统之间的信息交换

GBK编码:是汉字编码标准之一,是在GB2312-80 标准基础上的内码扩展规范,使用了双字节编码

ASCII编码:是对英语字符和二进制之间的关系做的统一规定

Unicode编码:这是一种世界上所有字符的编码。当然了它没有规定的存储方式。

UTF-8编码:是 UnicodeTransformation Format - 8 bit 的缩写,UTF-8 是Unicode 的一种实现方式。它是可变长的编码方式,可以使用1~4 个字节表示一个字符,可根据不同的符号而变化字节长度。

示例:

在一个文本中进行两种编码操作时需要编码转换,读取时用decode将文本原来的编码转换成Unicode,写入时用encode将编码转换成需要转换成的编码。

代码如下:

1

2

3

4

5

6

7

8

9

10

11

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

 

content=u'你好' #Unicode格式字符串

 

f1=open('test.txt', 'w')

info1 = content.encode('GBK') #写入时,编码为GBK

f1.write(info1)

f1.close()

 

f2 = open('test.txt', 'r')

info2 = f2.read().decode('GBK') #读取时,已知GBK,解码为Unicode