痛苦而艰难 才写出这一点点,这是个登陆测试

main

  1. # -*- coding: utf-8 -*-
  2. from selenium import webdriver
  3. import login_tst
  4. import time
  5. import thread
  6. ms={}
  7. def thread_start_():
  8. global ms
  9. ms=login_tst.GST_start()#开始抓包
  10. return
  11.  
  12. driver=''
  13. try:
  14. driver = webdriver.Chrome()#驱动加载 火狐用Firefox()
  15. except Exception as e:
  16. print format(e)
  17. driver.get('http://***.***.***:8765/Index/login.html')
  18. time.sleep(1)
  19. name=unicode("13864619000","utf-8")#只抓取了与服务器之间交互的值做判断,所以js的语句没办法测试
  20. password=unicode("000ww000","utf-8")#也就是无法测试手机号格式不符,密码为空的情况,
  21. driver.find_element_by_name('phone').send_keys(name)#这个使用find_element_by_name获取其元素是否显示应该就很好判断
  22. time.sleep(1)
  23. driver.find_element_by_name('password').send_keys(password)
  24. time.sleep(1)
  25. thread.start_new_thread(thread_start_,())
  26. time.sleep(2)
  27.  
  28. driver.find_element_by_tag_name('button').click()
  29.  
  30. time.sleep(1)
  31. if ms=={}:
  32. print "系统错误"
  33. elif ms['msg']==u'帐号或密码错误!' and ms['state']==u"0" :
  34. print "密码不对"
  35. elif ms['msg']==u"登录成功..."and ms['state']==u"1" :
  36. print "密码正确"
  37. elif ms['msg']==u"验证码错误!"and ms['state']==u"3" :
  38. print "验证码错误"
  39. elif ms['msg']==u"此账号没有经过授权,请联系管理员!"and ms['state']==u"0" :
  40. print "账号错误"
  41. else:
  42. print "系统错误"
  43.  
  44. if(driver.current_url=='http://***.***.***.25:8765/Index/index'):
  45. print "进入网页成功"

抓包类login_tst

  1. # -*- coding: utf-8 -*-
  2. from scapy.all import *
  3. import re
  4.  
  5. ms={}
  6. def GET_print(packet):
  7. global ms
  8. for i in packet:
  9. # po=i.show()#没有返回值
  10. print "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
  11.  
  12. qq = i.sprintf("{Raw:%Raw.load%}").split(r"\r\n") # 获取数据包内的raw数据 不过该项目没有raw 呵呵
  13.  
  14. for li in qq:
  15.  
  16. patm = '{"msg":"(.*?)"' # 依靠表达式获取msg内部值
  17. text_listm = re.compile(patm).findall(str(li))
  18. pats = ',"state":(.?)' #获取state后的一个值
  19. text_lists = re.compile(pats).findall(str(li))
  20. if text_listm != []:
  21. z = 0
  22. while z < len(text_listm) and z < len(text_lists):
  23. # for oo in text_listm and (ss in text_lists):#显然是不行
  24.  
  25. oo = text_listm[z]
  26. ss = text_lists[z]
  27.  
  28. oo = oo.encode('utf-8').decode('unicode_escape')# 转为uncode编码用来显示汉字
  29. o = eval(repr(oo).replace('\\\\', '\\'))
  30.  
  31. #repr()与str()相对 repr可以更清楚的显示python对数据的处理 str更清楚的显示用户可见的信息
  32.  
  33. # strinfo = re.compile(r'\\\\') # 字符串有大量\\\ 用来替换 记得前面加r 作废!!!
  34. # oo = strinfo.sub(r'\\', oo)
  35. # oo=oo.encode('utf-8').decode('unicode_escape')
  36.  
  37. ms['msg'] = o
  38. print ms['msg']
  39.  
  40. ms['state'] = ss.encode('utf-8').decode('unicode_escape')#转不转码无所谓,为了便于管理还是转码了
  41. z += 1
  42.  
  43. print u"--------------"
  44. return
  45.  
  46. def stopf(packet):
  47. global ms
  48. print ms
  49. if ms!={}:#判断是否抓到关键包(状态码)
  50. return True #退出抓包
  51. else:
  52. return False #继续抓包
  53.  
  54. def GST_start():
  55. a = sniff(prn=GET_print, lfilter=lambda p: "HTTP/1.1 200 OK" in str(p), filter="tcp and host ***.***.***.25", count=0,stop_filter=stopf)
  56. # lfilter为抓包筛选语句 作用为只抓含有"HTTP/1.1 200 OK"开头的包 filter为抓包的BPF语言 包含tcp 以及host的包, count为抓包数,stop_filter退出抓包条件
  57.  
  58. return ms
  59.  
  60. # 遇到的困难有
  61. # 起py名要避开关键词 和其他的包名类名 等等
  62. # linux pip安装包要上root权限 打开charm也要开root权限 sudo su - root
  63. #注意编码的区别
  64. #如果接收不到值可能是sinff的lfilter或filter的BPF书写有问题
  65. #uncode编码非常麻烦尽量最后输出时再转换格式
  66. #关于uncode编码的‘\’转换 由于python内部不能存在单独的反斜杠所以替换后都是成对的反斜杠 在进行uncode编码转换时会不识别,
  67. # 解决办法:可以先将字符串先转换为uncode类型后再替换,替换后字符串会自动变为中文,在字典内输出显示依旧为utf8码,
  68. # 对比uncode编码字符串时 要注意在字符串前加u 比如:if ms['msg']==u'帐号或密码错误!'
  69. #使用import调用自己写的类时 注意不要在方法外写执行函数 如果非要执行请参考 if __name__ == '__main__':
  70. #抓包代码要写在按钮前面 使用线程务必在按钮事件前激活抓包
  71. #thread.start_new_thread没有返回值 因为很讨厌线程问题所以会避开使用threading类库继承之类的方法,尽量简单一些
  72. #pats = ',"state":(.?)' 的后面(.?)不能跟其他条件 不清楚为什么? 总之不能跟
  73. #乱码有可能是ide控制台输出的问题,也有可能是值的问题,要谨慎思考
  74.  
  75. #使用到的知识有
  76. #scapy库:一点点的正则,BPF语句的使用,http传输格式,tcp深入了解,
  77. #python:全局变量使用,回调的写法,字典的使用,线程,编码的区别与更改,类库绝对路径与相对路径的区别,关于乱码的解决思路,大小写的注意
  78. #ide:pycharm的一些功能的了解,特别是注意选用合适python,这样pip安装类库后才能正常显示在charm中
  79. #seleium:自动化框架的选择,http的基本了解,可以插入js,各个浏览器版本驱动安装皆不同,
  80. #win是将驱动放入浏览器文件夹,写入环境变量中,linux的我忘了。。
  81. #
  82. #fiddle:都是些基本操作,
  83. #javascript:似乎有框架可以用于ajax 这点属于知识盲区,方法的重写与重载,http的网页格式,
  84.  
  85. #提升的空间
  86. #使用excel,批量加载数值,真正实现自动化,
  87. #日志的实现,可以做到无人值守
  88. #选用更好的线程类
  89. #深度优化bpf语句
  90. #优化代码结构,使scapy类可以得到更好的重用
  91. #减少sleep的使用,优化速度
  92. #对于验证码显示以及网页各元素显示的验证
  93. #自动输入正确的验证码登陆验证 这点比较有意思 需要找个接口
  94. #还是希望使用纯粹的seleium做判断而不是依据抓包来判断登入成功
  95.  
  96. #操作步骤
  97. #登陆-》fiddle抓包——》观察传值有哪些,使用哪种方式传值——》观察网页源代码,js等推断出值的选用范围和逻辑方向,-》据此在scapy中编写bpf写入sniff
  98. #尽量抓到准确的包-》解析包-》提取关键的值来做逻辑判断-》seleium控制网页,输入数值,->scapy新建线程等待抓包,-》点击确定-》抓到包
  99. #根据数值判断执行不同方法
  100.  
  101. #至此学习合计大概花费4天的时间 每天8个小时左右
  102. #抓包scapy,自动化框架seleium,学习加编写各一天
  103. #linux系统问题一天(我py起名时竟然起了个跟selenium里面类名一样的,结果报错找不到类,我只好把类库和python装了卸,卸了装,足足花了6个小时才解决。。)
  104. #最扯的是linux的更新把浏览器内核还更新了 造成原本正常的seleium的浏览器内核作废,我又找了很长时间的错
  105. #网页分析一天 工具的选用与设计(至今不懂,登陆里面的javascript怎么写的,原想要写个js插入进去获值来判断是否登陆成功的,但对自己的js功力没啥信心,还是算了)
  106. #其余还有很多时间用在了梳理知识 写笔记,硬刚uncode编码,win和linux之间的兼容性问题上
  107.  
  108. #至此告一段落 这种自动化成本忒高了 要是鼠标流早完事边上喝茶去了

刚学测试和python 写的一般 让各位见笑了

首次自动化测试,使用selenium+scapy的更多相关文章

  1. 篇5 python自动化测试应用-Selenium环境篇

    篇5                            python自动化测试应用-Selenium环境篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),从本篇开始我将开始 ...

  2. 8月自动化测试课程 - Selenium开源自动化测试实践

    8月自动化测试课程 - Selenium开源自动化测试实践 http://gdtesting.cn/news.php?id=35

  3. RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)

    好久没有继续分享关于自动化测试相关的东西了,自动化在现今的测试领域已经越来越重要了,大部分公司在测试岗位招聘中都需要会相关的自动化测试知识.而 RobotFramework自动化测试框架 是自动化测试 ...

  4. RobotFramework自动化测试框架-Selenium Web自动化(三)关于在RobotFramework中如何使用Selenium很全的总结(下)

    本文紧接着RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)继续分享RobotFramewor ...

  5. Selenium 与自动化测试 —— 《Selenium 2 自动化测试实战》读书笔记

    背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工 ...

  6. 小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  7. 《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础

    第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1    初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 ...

  8. 《零成本实现Web自动化测试--基于Selenium》第二章 Selenium简介和基础

    第一部分 Selenium简介 1.Selenium 组建 1.1 Selenium-IDE Selenium-IDC是开发Selenium测试案例的集成开发环境.它像FireFox插件一样的工作,支 ...

  9. 《零成本实现Web自动化测试--基于Selenium》 第五章 Selenium-RC

    一. 简介 Selenium-RC可以适应更复杂的自动化测试需求,而不仅仅是简单的浏览器操作和线性执行.Selenium-RC能够充分利用编程语言来构建更复杂的自动化测试案例,例如读写文件.查询数据库 ...

随机推荐

  1. java架构之路(MQ专题)kafka集群配置和简单使用

    前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅 ...

  2. hdu 1205 吃糖果 (抽屉原理<鸽笼原理>)

    吃糖果Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submissi ...

  3. 力扣(LeetCode)三个数的最大乘积 个人题解

    给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3] 输出: 6 示例 2: 输入: [1,2,3,4] 输出: 24 注意: 给定的整型数组长度 ...

  4. Prometheus+Altermanager钉钉报警

    Prometheus+Altermanager钉钉报警 一.添加钉钉机器人 参考钉钉官方文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq ...

  5. PostgreSQL各数据类型的内置函数

    参考<PostgreSQL实战> 3.1.2 数字类型操作符和数学函数 PostgreSQL 支持数字类型操作符和丰富的数学函数 例如支持加.减.乘.除.模取取余操作符 SELECT 1+ ...

  6. ArrayList和LinkedList的源码学习,理解两者在插入、删除、和查找的性能差异

    List的使用 List的子类 1). ArrayList 数据结构:数组 2). Vector 数据结构:数组 3). LinkedList 数据结构:循环双向链表 ArrayList .Vecto ...

  7. python requirements.txt的创建及使用

    要求文件(requirements.txt)是安装包的依赖项及版本的记录文件. pip: 创建 (venv) $ pip freeze >requirements.txt 使用 (venv) $ ...

  8. [FPGA]Verilog实现可自定义的倒计时器(24秒为例)

    目录 想说的话... 样例_边沿检测计数器 代码讲解 仿真演示 拓展_自定义倒计时数和倒计时间隔 代码讲解 仿真演示 总结 实例_24秒倒计时器 想说的话... 本次实现的是一个24秒倒计时器,功能顾 ...

  9. Redis的存储类型、集群架构、以及应用场景

    什么是redis redis是一种支持Key-Value等多种数据结构的存储系统.可用于缓存.事件发布或订阅.高速队列等场景.该数据库使用ANSI C语言编写,支持网络,提供字符串.哈希.列表.队列. ...

  10. 初探SpringMVC,走进SpringMVC的世界

    1.Springmvc入门 1.1.Springmvc是什么 SpringMVC是Spring中的一个组件,目前(2019)在互联网公司用的很多,是必需学习的一门框架技术!SpringMVC用于web ...