• 14
  • 14
分享
  • 6个案例教你快速掌握Python基础知识——软件测试圈
  • 曼倩诙谐 2021-09-09 10:07:57 字数 5662 阅读 2320 收藏 14

  最近系统学习了一遍python基础知识,学着学着灵光一闪,想到有没有快速掌握知识的方法。一般正常的逻辑是边看基础知识边练习案例,是一个书由厚变薄的过程。   不过现在节奏这么快,尤其是互联网公司,排除周末在家看孩子的时间,几乎没有时间和精力再进行深度学习,所以这篇文章就诞生了。

   本文通过案例入手直接结合python知识点,可以快速掌握python基础知识点。

  案例名称

   ·计算圆形面积

   ·输入字符并倒序输出

   ·猜数字游戏

   ·按照诗句格式输出诗词

   ·统计文本中出现次数最多的10个单词(txt)

   ·web页面元素提取

  计算圆形面积

  知识点:print 结合format()函数实现输出格式。

   固定的公式:

print(<输出字符串模板>.format(<变量1>,<变量2>,<变量3>))

  实现代码:

r = 25    # 圆的半径是25
  area = 3.1415 * r * r  #圆的公式
  print(area)
 print('{:.2f}'.format(area) )  # 只输出两位小数

  新手易错点:

   format前的字符串模板格式‘{:.2f}’ 经常会写错,其中一个{}对应一个format里面的参数。

  输入字符并倒序输出

  核心思想:找到最后一个元素并输出。

   知识点:

   ·输入使用input函数

   ·计算长度使用len()函数

   ·输出函数结尾使用end=’‘,作用在输出的字符后方添加空字符串

 #输入文本
  s=input('请输入一段文本:')
  #计算输入内容的长度并赋值给i
  i=len(s)-1
  #倒序循环输出
  while i>=0:
      print(s[i],end='')
      i=i-1

  实现效果:

2-1.png

  猜数字游戏

  随机产生一个数字,并判断输入的数字和这个随机数直到猜测成功。

   知识点:

   1.使用random.randint()函数生成一个随机数字

   2.while()循环,当未满足条件一直执行,满足条件break跳出循环

   3.输入数字eval函数结合input,将字符串类型转换成整数 

   4.if 三分支条件判断,if elif else 格式 

  实现代码:

import random
  
  #生成随机数
  a=random.randint(0,1000)
  #统计次数
  count=0
  
  while True:    
      number=eval(input('请输入0到1000之间的一个数:'))    
  
  count=count+1
  #判断比较两个数
  if number>a:
      print('输大了')
  elif number<a:
      print('输小了')
  else:
      print('猜对了')
      break
  
  print('猜了次数是:',count)

  效果图:

2-2.png

  按照诗句格式输出诗词

  原来格式:

   人生得意须尽欢,莫使金樽空对月。

   天生我材必有用,千金散尽还复来。

   输出效果:

2-3.png

  设计思路:

   ·将所有标点符号替换为\n

   ·文本居中对齐显示

  知识点:

  1.替换函数line.replace(变量名,要替换的值) 

  2.居中对齐line.center(宽度) 

  3.函数调用,将文本变量txt传入替换函数linesplit中

txt = '''
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
'''
#定义一个函数,实现将标点符号替换为\n
def linesplit(line):
    plist = [',', '!', '?', ',', '。', '!', '?']
    for p in plist:
        line=line.replace(p,'\n')
    return line.split('\n')
linewidth = 30  # 预定的输出宽度
#定义一个函数,实现居中对齐
def lineprint(line):
    global linewidth
    print(line.center(linewidth))
   
#调用函数
newlines=linesplit(txt)
for newline in newlines:
    lineprint(newline)

  统计文本中出现次数最多的10个单词

  我们来看看实现效果:

2-4.png

  步骤拆分:

   首先,将文本内容统一为小写,使用lower()函数;

   再次,将文本中特殊字符替换为空格,replace()函数;

   按空格将文本进行切割,使用split()函数;

   统计单词出现的次数;

   按频率从大到小排序 sort()函数;

   按照固定格式输出 ,使用format()函数。

   按照上面的步骤实现代码。

   首先,将文本内容统一为小写,使用lower()函数:

 def gettxt():
  #读取文件
  txt=open('hamlet.txt','r').read()
  txt=txt.lower()

  再次,将文本中特殊字符替换为空格,replace()函数:

   for ch in ''!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':'
    txt=txt.replace('')
  return txt

  按空格将文本进行切割,使用split()函数:

 hmlttxt=gettxt()
words=hmlttxt.split()

  统计单词出现的次数:

 counts=0
for word in words:
  counts[word]=counts.get(word,0)+1   #对word出现的频率进行统计,当word不在words时,返回值是0,当word在words中时,返回+1,以此进行累计计数

  按频率从大到小排序 items()sort()排序函数:

 items=list(counts.items())
items.sort(key=lambada x:x[1],reverse=True)

  上面的x可以是任意字母,reverse=True倒序排序,默认升序。 

  按照固定格式输出 ,使用format()函数:

 for i in range(10)
  word,count=item[i]
  print('{0:<10}{1:>5}'.format(word,count))

  完整代码:

# 首先,将文本内容统一为小写,使用lower()函数
def gettxt():
    txt=open('hamlet.txt','r').read()
    txt=txt.lower()
# 将文本中特殊字符替换为空格,replace()函数
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt=txt.replace(ch,'')
    return txt
# 按空格将文本进行切割,使用split()函数
hamlettxt=gettxt()
words=hamlettxt.split()
# 统计字数
counts={}
for word in words:
    counts[word]=counts.get(word,0)+1
    
# 按频率从大到小排序  sort()函数
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
# 按照固定格式输出 ,使用format()函数
for i in range(10):
    word, count=items[i]
    print("{0:<10},{1:>5}".format(word,count))

  web页面元素提取图片url路径信息

  这个功能目的主要是替换函数 及 自顶向下的设计思想。

   实现的效果:

2-5.png

  对整个功能拆分为如下过程:

   首先,提取页面所有元素;

   其次,提取图片的url路径;

   然后,将路径信息输出显示; 

  最后,将这些路径保存到文件中。

   我们把上面几个步骤,每个步骤封装成一个函数,最后main()函数进行调用,其中提取图片的url路径为核心。

  提取页面所有元素

  涉及到知识点:文件打开、读取及关闭。

 def gethtmllines(htmlpath):
  #文件打开
  f=open(r,'htmlpath',encoding='utf-8')
  #文件读取
  ls=f.readlines()
  #文件关闭
  f.close()
  return ls

  提取图片的url路径

  源码:

2-6.png

  知识点:列表形式存放截取后的地址;列表的切割,split()函数。

 def geturl(ls):
  urls=[]
  for line in ls:
    if 'img' in line:
      url=line.split('src=')[-1].split('"')[1]
      urls.append(url)

  将路径信息输出显示

  知识点:for循环将路径信息输出。

 for循环将路径信息输出
def show(urls):
  count=0
  for url in urls:
    print('第{:2}个url{}'.format(count,url))
    count+=1

  将这些路径保存到文件中

  知识点:文件的写入。

def save(filepath,urls):
  f=open(filepate,'w')
  for url in urls:
    f.write(url+'\n')
  f.close()

  main()函数,将上面的函数进行组合

def main():
    inputfile  = 'nationalgeographic.html'
    outputfile = 'nationalgeographic-urls.txt'
    htmlLines = getHTMLlines(inputfile)
    imageUrls = extractImageUrls(htmlLines)
    showResults(imageUrls)
    saveResults(outputfile, imageUrls)

  最终代码:

# Example_8_1.py
#1. 按行读取页面所有内容
def getHTMLlines(htmlpath):
    f = open(htmlpath, "r", encoding='utf-8')
    ls = f.readlines()
    f.close()
    return ls
#2. 提取http路径
def extractImageUrls(htmllist):
    urls = []
    for line in htmllist:
        if 'img' in line:
            url = line.split('src=')[-1].split('"')[1]
            print
            if 'http' in url:
                urls.append(url)
    return urls
#3. 输出链接地址   
def showResults(urls):
    count = 0
    for url in urls:
        print('第{:2}个URL:{}'.format(count, url))
        count += 1
#4. 保存结果到文件
def saveResults(filepath, urls):
    f = open(filepath, "w")
    for url in urls:
        f.write(url+"\n")
    f.close()
    
def main():
    inputfile  = 'nationalgeographic.html'
    outputfile = 'nationalgeographic-urls.txt'
    htmlLines = getHTMLlines(inputfile)
    imageUrls = extractImageUrls(htmlLines)
    showResults(imageUrls)
    saveResults(outputfile, imageUrls)
main()

  一句话总结:这个小案例可熟练掌握文件的读、写操作,可以体会函数的思想以及split()函数的拆分。

  总结

  上面主要介绍了python的基础功能,建议大家熟练掌握,主要知识点如下:

   ·input函数实现输入

   ·print结合format()函数对结果进行输出

   ·计算字符串长度len()函数 

   ·使用random.randint()函数生成随机数字

   ·eval函数结合input,将字符串类型转换成整数

   ·if 三分支条件判断,if elif else 格式

   ·替换函数line.replace(变量名,要替换的值)

   ·文本内容统一为小写,使用lower()函数 

   ·文本中特殊字符替换为空格,replace()函数 

   ·文本进行切割,使用split()函数 

   ·从大到小排序 sort()函数



作者:桃子   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 前言HTTP接口测试很简单,不管工具、框架、还是平台,只要很的好的几个点就是好工具。测试数据问题:比如删除接口,重复执行还能保持结果一致,必定要做数据初始化。接口依赖问题:B接口依赖A的返回值,C接口依赖B接口的返回值。加密问题:不同的接口加密规则不一样。有些用到时间戳、md5、base64、AES,如何提供种能力。断言问题:有些接口返回的结构体很复杂,如何灵活的做到断言。对于以上问题,工具和平台要么不支持,要么很麻烦,然而框架是最灵活的。unittest/pytest + requests/https 直接上手写代码就好了,既简单又灵活。那么同样是写代码,A框架...
            9 9 1188
            分享
          •        行为驱动开发英文名为Behave Driven Development,简称BDD,是一种敏捷开发方法,主要是从用户的需求出发强调系统行为。将此模型借鉴到自动化测试中称其为行为驱动测试模型,它是一种通过使用自然描述语言确定自动化测试脚本的模型。也就是说,用例的写法基本和功能测试用例的写法类似,具有良好协作的益处。这种测试模型使每个人都可以参与到行为开发中,而不仅仅是程序员。每个测试场景都是一个独立的行为,以避免重复,并且已有的行为可以重复使用。       目前在Python中最流行的 BDD 框架是...
            10 10 2853
            分享
          • 1、添加线程组--在测试计划上右击-添加-Threads-线程组线程数:登录用户人数Ramp-up Period:5s内5个人完成登录,隔一秒就开始登录下一个人循环测试:可以设定请求次数,此处是5个人循环两次,发送10个http请求2、添加http请求默认值--在线程组上右击-添加-配置元器件-http请求默认值这是下边sampler相同信息的集合,添加http请求默认值之后,sampler中此项信息可以空白,jmeter执行时会自动获取3、添加sampler-http请求-登录界面4、添加sampler-http请求-登录-携带用户名和密码可以看到-登录界面和登录携带参数的请求网址是不一样的...
            14 14 2171
            分享
          •   场景:有时候测试场景需要设置请求频率为一秒一次(或几秒一次)实现方法一:1、首先需要在线程组下设置循环次数。(可以理解为请求的次数)  1、次数设置为请求300次,其中线程数跟时间自行设置。  2、在设置的http请求下添加定时器 常数吞吐量定时器。  3、设置目标吞吐量(每分钟的样本量)  次数表示一分钟完成60次请求,就1秒一次,同理如果设置为30.0,即2秒一次。  综上设置,该请求为1秒一次,请求300次,共5分钟。  实现方法二:  1、添加定时器 固定定时器。  2、设置线程延迟(ms)(此处设置请求之间延迟1s,即1秒一次)。  完成上面设置,即实现请求频率为1s/次。作者:...
            0 0 780
            分享
          • 2019年算是我人生中最迷茫的一年,没有目标,没有方向,只知道工作不开心,我要欢工作,结果找了大半年的工作甚至一个面试机会都没有,刚开始还能以互联网的经济不景气来安慰自己,但是细细琢磨下,大半年时间连面试都没有,是不是自己简历就有问题?面试不通过,是不是自己知识储备的问题?一直不改变,不发现自己的原因,那就与好工作无缘。最近找到了个还算满意的工作,一下子接了4,5个offer,激动死我了,下面是我个人经验的总结,希望能给朋友们一点帮助吧!一、没有面试机会,一定是简历的问题。很多朋友都会说,我投了简历啊,但是一个面试都没有,没有接到面试,肯定是你简历的问题,你在hr那边都没有通过。1)首先,简历...
            1 3 2706
            分享
      • 51testing软件测试圈微信