Table des matières
1. Quelle est la différence entre l'architecture B/S et l'architecture C/S ?
2. Quelle est la différence entre Cookie et Session ?
3. Quel est le but du test ?
4. Pour tester un stylo à bille, quels aspects faut-il tester ?
5. Conception de cas de test triangulaire ?
6. Quels bogues classiques ont été trouvés dans le projet ? Quelles sont les causes?
7. Comment trouver des bogues dans le logiciel le plus tôt possible ?
8. Comment tester la fonction de recherche ?
9. Si vous deviez tester le panier d'achat de Taobao, comment concevriez-vous le scénario de test et quels aspects devriez-vous prendre en compte ?
10. Combien de méthodes de connexion de structure de table la base de données possède-t-elle ?
11. Quelles sont les méthodes couramment utilisées pour positionner les éléments dans l'automatisation de l'interface utilisateur ?
12. Quelle est la différence entre la fermeture du navigateur close() et quit() ?
13. Quelles sont les raisons pour lesquelles les éléments ne peuvent pas être localisés dans les tests automatisés ?
14. Quels sont les outils de test automatisés couramment utilisés ?
15. Comment se fait le test de réseau faible ?
16. Quelle est la différence entre les mots-clés et les données ?
17. Qu'est-ce qu'un décorateur et quelle est sa fonction ?
18. Comment obtenir une liste de toutes les clés d'un dictionnaire ?
19. Comment vérifier la charge du serveur Linux ?
20. Utiliser Python pour écrire quatre-vingt-dix-neuf formules de multiplication ?
1. Quelle est la différence entre l'architecture B/S et l'architecture C/S ?
1. Différentes architectures : l'architecture B/S est l'architecture navigateur/serveur, et l'architecture C/S est l'architecture client/serveur.
2. Les clients sont différents : le client de l'architecture B/S est un navigateur, et le client de l'architecture C/S est un programme client.
3. Différentes fonctions : l'architecture B/S est principalement utilisée pour les services réseau et l'architecture C/S est principalement utilisée pour les services d'application.
4. La maintenance est différente : la maintenance de l'architecture B/S se fait principalement côté serveur, et la maintenance de l'architecture C/S se fait principalement côté client et côté serveur.
5. Sécurité différente : l'architecture B/S a une sécurité plus faible, tandis que l'architecture C/S a une sécurité plus élevée.
2. Quelle est la différence entre Cookie et Session ?
Cookie et Session sont des technologies utilisées pour enregistrer les informations de l'utilisateur, mais il existe des différences évidentes entre elles :
1. Les données des cookies sont stockées sur le navigateur du client, tandis que les données de session sont stockées sur le serveur.
2. Les cookies ne sont pas très sécurisés. D'autres peuvent analyser les cookies stockés localement et les tromper. Les sessions sont plus sécurisées, et le serveur les cryptera.
3. Le cookie peut définir un délai d'expiration. Lorsque le navigateur est fermé, le cookie sera invalide et la session sera enregistrée pendant un certain temps. Lorsque le navigateur est fermé, la session ne sera pas invalide. Uniquement lorsque le délai d'expiration de la session est écoulé, la session sera invalide.
4. Les cookies peuvent enregistrer des informations côté client, tandis que Session ne peut enregistrer que des informations côté serveur.
3. Quel est le but du test ?
Le but des tests est de s'assurer que le système logiciel peut fonctionner normalement comme prévu et peut répondre aux besoins des utilisateurs.
4. Pour tester un stylo à bille, quels aspects faut-il tester ?
1. Qualité d'écriture : Vérifiez la finesse de la plume, la douceur de la recharge, la couleur de la recharge, la durabilité de la recharge, etc.
2. Qualité de l'apparence : vérifiez l'apparence du corps du stylo, l'apparence de la recharge, l'apparence du capuchon, etc.
3. Qualité du processus : Vérifiez l'installation de la recharge, le démontage de la recharge, le remplacement de la recharge, etc.
4. Performances fonctionnelles : Vérifiez la finesse de la plume, la douceur de la recharge, la durabilité de la recharge, la durabilité de la recharge, etc.
5. Performances de sécurité : Vérifiez la sécurité de la recharge, la résistance à l'usure de la recharge, la résistance à la corrosion de la recharge, etc.
5. Conception de cas de test triangulaire ?
1. Cas de test 1 : Saisissez trois longueurs de côté pour vérifier si un triangle peut être formé
2. Cas de test 2 : Entrez les longueurs de trois côtés pour vérifier si un triangle équilatéral peut être formé
3. Cas de test 3 : Entrez les longueurs de trois côtés pour vérifier si un triangle isocèle peut être formé
4. Cas de test 4 : Entrez les longueurs de trois côtés pour vérifier si un triangle rectangle peut être formé
5. Cas de test 5 : Entrez les longueurs de trois côtés pour vérifier si un triangle obtus peut être formé
6. Quels bogues classiques ont été trouvés dans le projet ? Quelles sont les causes?
1. Exception de pointeur nul : lorsqu'un programme tente d'accéder à un pointeur qui n'existe pas, une exception de pointeur nul se produit. Cette exception est généralement causée par le fait que le programmeur oublie d'initialiser le pointeur ou tente d'accéder à une adresse mémoire qui n'existe pas.
2. Accès hors limites : L'accès hors limites se produit lorsqu'un programme tente d'accéder à un élément au-delà de la plage du tableau. Ce type d'exception est généralement dû au fait que le programmeur a oublié de vérifier les conditions aux limites du tableau.
3. Fuite de mémoire : Lorsque le programme oublie de libérer la mémoire après avoir demandé de la mémoire, une fuite de mémoire se produit. Ce type d'exception est généralement causé par le fait que le programmeur oublie de libérer la mémoire ou oublie de vérifier si la mémoire est libérée.
7. Comment trouver des bogues dans le logiciel le plus tôt possible ?
1. Tout d'abord, il est nécessaire d'avoir une compréhension claire de la fonction et de l'architecture du logiciel afin de mieux localiser le problème.
2. Essayez d'utiliser différentes fonctions du logiciel pour voir s'il y a une situation anormale.
3. Essayez d'utiliser différentes données d'entrée pour voir si le logiciel peut les gérer correctement.
4. Essayez d'utiliser la fonction de test automatique du logiciel pour voir s'il y a une situation anormale.
5. Essayez d'utiliser la fonction de débogage du logiciel pour vérifier le processus d'exécution du logiciel et les éventuelles erreurs.
6. Essayez d'utiliser la fonction de journalisation du logiciel pour vérifier les éventuels messages d'erreur.
7、尝试使用第三方工具,如内存调试器,以查看可能出现的内存泄漏。
8、尝试使用第三方工具,如性能分析器,以查看可能出现的性能问题。
9、尝试使用第三方工具,如安全扫描器,以查看可能出现的安全漏洞。
10、尝试使用第三方工具,如静态代码分析器,以查看可能出现的代码错误。
8、搜索功能怎么测试?
1、功能方面的测试:
搜索单个字,词语,句子,检索到的内容是否准确,链接是否准确
长度:例如输入框支持100字符,那需要测试100字符、101字符,最大长度的显示是否正常
哪些是支持的字符类型:数字、字母、汉字、字符!@!#、特殊字符(需求而定)
字符串前后中带空格,前后的空格是否过滤,中间的空格是否保留(需求而定)
全角半角的字母、数字(需求而定)
2、性能方面的测试
点击搜索按钮后,搜索结果多长时间能够显示
进入搜索页面需要多久
3、安全性方面的测试
能否防止SQL注入攻击,否防止XSS攻击
4、用户体验测试
页面布局是否合理,输入框和按钮是否对齐
输入框的大小和按钮的长度,高度是否合理
快捷键:能不能全选,部分选择,复制剪切粘贴是否可用,粘贴超过最大长度的字符串怎么显示
5、兼容性测试
BS架构:不同浏览器测试,比如:火狐,谷歌,360这些
APP:在主流的不同类型,不同分辨率,不同操作系统的手机上测试,苹果,华为,vivo,oppo等
9、如果需要你来测试淘宝的购物车,你会如何设计测试用例,需要从哪些方面来考虑?
1、打开淘宝页面后,页面的布局是否是完整的
2、页面的功能按钮是否可以正常显示
3、在商品页面是否会显示加入购物车
4、选中的商品是否能加入购物车
5、加入购物车后是否可以显示商品的所有信息
6、添加到购物车的商品是否可以进行删除
7、如果在网络不佳或无网络时是否可以成功的加入购物车
8、添加购物车后,点击加号的时候数量是否会增长
9、添加购物车后,点击减号的时候数量是否会减少
10、如果点击减号减到一定程度时,是否会提示不能再减少了
11、如果淘宝用户未登录时,如果添加到购物车时是否会提示请先登录
12、如果没有选择任何商品,点击结算,是否会提示用户“请添加要结算的商品”
13、勾选商品后已选商品的总价是否会显示
14、勾选商品显示总价后,总价计算是否正确
15、勾选商品,点击结算按钮后,是否会进入确认订单信息的页面
16、进入确认订单信息页面的总价是否正确
17、总价是否会出现精度不准的情况,比如:正确总价是18.99,结果显示的确实18.999999999999
18、是否有回到顶部功能
19、是否可以编辑商品属性
20、能否移入到收藏中
21、店铺名称是否显示
22、能否选择全部商品
23、能否取消选择全部商品
24、是否可以在购物车中修改商品的规格
25、添加购物的数量超过库存数量是否进行限制
26、是否可以进行清空购物车
27、结算金额是否会随着商品数量的增加减少进行变化
28、如果刷新的次数过多,是否会出现闪退的现象
29、当手机来电话时淘宝页面是会还会运行
30、当手机内存不够时,淘宝运行起来是否会出现卡顿的现象
10、数据库有几种表结构的连接方式?
内连接(inner join)
外连接(outer join)
左外连接(left outer join)
右外连接(right outer join)
全外连接(full outer join)
区别:
1、其中外连接的“OUTER”关键字可以省略不写。
2、内连接用于返回满足连接条件的记录;而外连接则是内连接的扩展,它不仅会满足连接条件的记录,而且还会返回不满足连接条件的记录。
3、内连接查询返回满足条件的所有记录,默认情况下没有指定任何连接则为内连接。
4、左外连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符左边表的其他行
5、右外连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符右边表的其他行。
6、全连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的其他行。
11、UI自动化中常用的定位元素的方法?
1、id定位
find_element_by_id("") #通过id来定位元素
在HTML中,id是唯一的,通过id但部分元素可能没有id或id为随机值。
2、name定位
find_element_by_name("") #通过name来定位元素
3、class定位
find_element_by_class_name("") #通过class来定位元素
4、tag定位
find_element_by_tag_name("") #通过tag来定位元素
5、link定位
find_element_by_link_text("") #通过link来定位元素
6、partial link定位
find_element_by_partial_link_text("") #通过元素标签对之间的部分文字进行元素定位
7、XPath定位(UI自动化应用最普遍的)
下面列出了最有用的路径表达式:
nodeName 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
… 选取当前节点的父节点
@ 选取属性
下面XPath的几种元素定位方法
(1)绝对路径定位
find_element_by_xpath("/html/body/div[2]/div[2]/div[5]/div[1]/div/form/span[2]/input")
(2)利用元素定位(与前六种方法类似)
#利用元素属性进行定位
find_element_by_xpath("//input[@id='**']")
find_element_by_xpath("//input[@name='**']")
find_element_by_xpath("//input[@class='**']")
find_element_by_xpath("//input[@type='**']")
#利用元素层级属性进行定位,相对路径 #根据class属性唯一值,一层一层定位到元素
find_element_by_xpath("//div[@class='**'])/table/tbody/tr/td/div")
#利用逻辑运算符进行定位
find_element_by_xpath("//input[@id='**' and @name='**']")
find_element_by_xpath("//input[@id='**' or @name='**']")
#利用contains包含方法进行定位,查找classname属性下,classname中包含name的元素
find_element_by_xpath("//classname[contains(@classname,'name')]")
#利用starts-with,使用开始位置元素进行定位
find_element_by_xpath("//input[starts-with(@name,'vaule')]")
#利用ends-with,使用结束位置元素进行定位
find_element_by_xpath("//input[ends-with(@name,'vaule')]")
#利用text()进行元素定位
find_element_by_xpath("//input[text(),'百度']")
#其它方法 #string-length()、substring、substring-before()、substring-after()
8、CSS_selector定位
CSS选择器可以更灵活的选择空间的任意属性,且CSS定位速度比XPath定位快。
find_element_by_css_selector(".**") #通过class定位,CSS中class选择器以"."来定义
find_element_by_css_selector("#**") #通过id定位,CSS中id选择器以"#"来定义
find_element_by_css_selector("div") #通过标签名定位
find_element_by_css_selector("[name='**']") #通过name进行定位
find_element_by_css_selector("td > div") #通过父标签,查找子元素中标签名为div的所有元素
12、关闭浏览器close()与quit()的区别?
close() 关闭当前操作的窗口(并非关闭超链接新打开的窗口)
quit() 退出相关驱动程序,关闭所有窗口
一般在自动化脚本执行完后,需要清空环境,释放占用的内存。采用driver.quit()来直接关闭浏览器。
13、自动化测试中元素定位不到有哪几种原因?
1、检查元素是不是写对了(看似简单,但是我相信还是会有人自己打错了)
2、ID是自动生成的,随机的,如果是自动生成的id,那么朋友,你只能是放弃使用id来定位了
3、选用的方法对应的属性并不唯一,整个页面有好几个
4、查看是否存在多个iframe标签,需要切换iframe再定位
5、使用了带有空格的属性,定位的时候请避开选用带空格的属性
6、看看是不是使用了绝对路径,因为在前端开发的时候可能会增删改标签,这就导致你用的绝对路径出错了,所以使用相对路径会比较好
7、检查有没有加上等待时间,很多时候是因为未加载出来元素导致元素找不到
8、检查自己设的等待时间是不是太短了,别以为加了等待时间就万事ok了,说不定你设的3秒内加载元素,结果人家第4秒才加载出来,那就哦豁了,所以可以适当的加上等待时间,至于是隐性等待还是显性等待或者是固定等待,视情况选择吧
9、检查你选择的元素是不是可见的,有的元素会被隐藏
14、常用自动化测试工具有哪些?
1、Selenium:Selenium是一种用于Web应用程序测试的开源自动化测试工具。它可以模拟用户在Web浏览器中的操作,以验证Web应用程序的功能和性能。
2、Appium:Appium是一种开源的自动化测试框架,可用于测试原生、混合和移动Web应用程序。它可以在多种移动设备和操作系统上运行,包括iOS、Android和Firefox OS。
3、Watir:Watir是一种开源的自动化测试框架,可用于测试Web应用程序。它使用Ruby编写,可以模拟用户在Web浏览器中的操作,以验证Web应用程序的功能和性能。
4、TestComplete:TestComplete是一种商业自动化测试工具,可用于测试Windows、Web、移动和桌面应用程序。它可以自动录制和回放用户操作,以验证应用程序的功能和性能。
5、QTP:QTP(QuickTest Professional)是一种商业自动化测试工具,可用于测试Windows、Web、移动和桌面应用程序。它可以自动录制和回放用户操作,以验证应用程序的功能和性能。
15、弱网测试是怎么做的?
弱网测试是指在网络环境较差的情况下,测试软件或硬件的性能和稳定性。它的主要目的是检测软件或硬件在网络环境较差的情况下是否能够正常运行,以及在网络环境较差的情况下,软件或硬件的性能是否能够满足用户的要求。
弱网测试的具体步骤如下:
1、分析用户的网络环境:首先,需要分析用户的网络环境,包括网络的带宽、网络的延迟、网络的丢包率等,以便确定测试的网络环境。
2、设置测试环境:根据用户的网络环境,设置测试环境,包括设置网络的带宽、网络的延迟、网络的丢包率等,以便模拟用户的网络环境。
3、进行测试:在设置好的测试环境中,进行测试,检测软件或硬件在网络环境较差的情况下是否能够正常运行,以及在网络环境较差的情况下,软件或硬件的性能是否能够满足用户的要求。
4、分析测试结果:最后,分析测试结果,确定软件或硬件在网络环境较差的情况下是否能够正常运行,以及在网络环境较差的情况下,软件或硬件的性能是否能够满足用户的要求。
16、关键字驱动和数据驱动有哪些区别?
1、关键字驱动是指测试用例的执行过程是由一系列的关键字来控制的,而数据驱动是指测试用例的执行过程是由外部的数据文件来控制的。
2、关键字驱动的测试用例的编写比较简单,而数据驱动的测试用例的编写比较复杂。
3、关键字驱动的测试用例可以更容易地实现参数化,而数据驱动的测试用例可以更容易地实现数据驱动。
4、关键字驱动的测试用例可以更容易地实现自动化,而数据驱动的测试用例可以更容易地实现可维护性。
17、什么是装饰器,其作用是什么?
装饰器是一种特殊的函数,它可以在不更改原函数的基础上,为其添加额外的功能。它的作用是在不改变原函数的基础上,为其添加额外的功能,从而使代码更加简洁、优雅。
18、怎样获取字典中的所有键的列表?
#可以使用dict.keys()方法获取字典中的所有键的列表:
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
keys = dict.keys()
print(keys)
# 输出结果:dict_keys(['Name', 'Age', 'Class'])
19、如何查看Linux服务器的负载?
可以使用top命令查看Linux服务器的负载,top命令可以实时显示系统中各个进程的资源占用情况,包括CPU使用率、内存使用量等。
也可以使用uptime命令查看Linux服务器的负载,uptime命令可以显示系统的运行时间、当前登录用户数、系统负载等信息。
20、利用Python写出九九乘法口诀?
for i in range(1, 10):
for j in range(1, i+1):
print('{}x{}={}\t'.format(i, j, i*j), end='')
print()
# 输出结果:
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
待续。。。